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