javascript
深入浅出javascript(二)函数和this对象
一、函數對象的屬性和方法
函數是一種數據類型,也是對象,這一點很明確。因此,函數對象也可以添加屬性和方法,但是這里的屬性和方法是靜態的,之所以這樣說,就是為了區別構造函數。
示例如下:
①創建一個空的函數對象circle
function circle() //定義一個空函數circle(),也可以稱為建立函數對象circle; { }②為此函數對象添加屬性和方法:
function circle() //定義一個空函數circle(),也可以稱為建立函數對象circle; { } circle.radius=10; //添加半徑屬性 circle.area=function() //添加求面積方法area; {alert(circle.radius*circle.radius*3.14); } alert(circle.radius); //靜態使用函數對象circle的屬性; circle.area(); //靜態調用函數對象circle的方法;例子說明:即使函數沒有被調用,也可以訪問到函數對象的屬性和方法(靜態)
2017-04-18?16:35:32?補充:
在函數體內也可以添加屬性,但是這種屬性必須在函數調用之后才能使用。
二、函數作為構造函數(this特權方法)
函數作為構造函數屬性必須用this。 上面例子說明:函數對象的屬性和方法是它本身所具有的,似乎和通過它創建的對象“一點關系都沒有”。
舉例說明:
var a=new circle(); //將circle()作為構造函數創建一個對象; alert(a.radius); //企圖訪問構造函數對象的屬性?結果undefined..構造函數的正確用法:
function circle(r) //定義帶參數的構造函數 {this.radius=r; //半徑屬性this.area=function() //求面積方法area; {return (this.radius*this.radius*3.14);} }var a=new circle(20); //創建對象; alert(a.area()); //調用方法;很多書本上的解釋是這樣的:先創建一個空對象,然后再將此對象代入構造函數,做為this進行匹配,聽起來也很合理。
2017-04-18?16:52:37 補充:
假如沒有實例化對象和構造函數綁定,那么構造函數里面的this指的是誰呢?其實,這里的this指的是window對象!
特權方法:有權訪問私有變量和私有方法的方法。
?
三、公用方法
問題引出:通過構造函數創建對象會出現一個問題:產生的對象會各自占拷貝一份方法,這樣會有點浪費。而在C++中,代碼是共享的一份。
所有的Javascript函數均具有一個名為prototype的屬性,此屬性引用了(構造函數的)原型對象。初始時原型對象為空,但是原型對象添加屬性和方法后,能夠被實例化的對象繼承。
補充:prototype添加的方法稱為:公共方法
function f(name) //構造函數 {this.name=name; } f.prototype.showName=function() //通過原型prototype添加一個方法,此方法為共享。 {document.write(this.name); }var apple=new f("apple"); //生成apple對象; apple.showName();var orange=new f("orange"); //生成orange對象; orange.showName();alert(apple.showName()==orange.showName());//完全相同,返回true?
轉載于:https://www.cnblogs.com/tinaluo/p/6669413.html
總結
以上是生活随笔為你收集整理的深入浅出javascript(二)函数和this对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Netflix Zuul与Nginx的性
- 下一篇: 第二百一十七节,jQuery EasyU