国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript構造函數詳解

2019-11-20 10:54:54
字體:
來源:轉載
供稿:網友

構造函數就是初始化一個實例對象,對象的prototype屬性是繼承一個實例對象。

  構造函數注意事項:

1.默認函數首字母大寫

2.構造函數并沒有顯示返回任何東西。new 操作符會自動創建給定的類型并返回他們,當調用構造函數時,new會自動創建this對象,且類型就是構造函數類型。

3.也可以在構造函數中顯示調用return.如果返回的值是一個對象,它會代替新創建的對象實例返回。如果返回的值是一個原始類型,它會被忽略,新創建的實例會被返回。    

 function Person( name){        this.name =name;      }       var p1=new Person('John');

等同于:

   function person(name ){        Object obj =new Object();        obj.name =name;         return obj;      }       var p1= person("John");

4.因為構造函數也是函數,所以可以直接被調用,但是它的返回值為undefine,此時構造函數里面的this對象等于全局this對象。this.name其實就是創建一個全局的變量name。在嚴格模式下,當你補通過new 調用Person構造函數會出現錯誤。

 

5.也可以在構造函數中用Object.defineProperty()方法來幫助我們初始化:

  function Person( name){        Object.defineProperty(this, "name"{          get :function(){             return name;          },           set:function (newName){            name =newName;          },          enumerable :true, //可枚舉,默認為false           configurable:true //可配置         });      }         var p1=new Person('John');

6.在構造函數中使用原型對象      

 //比直接在構造函數中寫的效率要高的多       Person.prototype.sayName= function(){         console.log(this.name);      };

但是如果方法比較多的話,大多人會采用一種更簡潔的方法:直接使用一個對象字面形式替換原型對象,如下:      

 Person.prototype ={        sayName :function(){           console.log(this.name);        },        toString :function(){           return "[Person "+ this.name+"]" ;        }      };

這種方式非常流行,因為你不用多次鍵入Person.prototype,但有一個副作用你一定要注意:

使用字面量形式改寫了原型對象改變了構造函數的屬性,因此他指向Object而不是Person。這是因為原型對象具有一個constructor屬性,這是其他對象實例所沒有的。當一個函數被創建時,它的prototype屬性也被創建,且該原型對象的constructor屬性指向該函數。當使用對象字面量形式改寫原型對象時,其constructor屬性將被置為泛用對象Object.為了避免這一點,需要在改寫原型對象的時候手動重置constructor,如下:

 Person.prototype ={        constructor :Person,                sayName :function(){           console.log(this.name);        },                toString :function(){           return "[Person "+ this.name+"]" ;        }      };

再次測試:

p1.constructor===Person

true 

p1.constructor===Object

false

p1 instanceof Person

true

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄汾县| 凤城市| 醴陵市| 桃园市| 依兰县| 祁东县| 万源市| 恩施市| 西城区| 古交市| 中卫市| 香港| 商河县| SHOW| 江西省| 正阳县| 沙雅县| 天水市| 兖州市| 凤山县| 饶河县| 阿拉善盟| 无为县| 宜丰县| 乾安县| 保定市| 错那县| 平江县| 沧源| 奉节县| 河曲县| 江门市| 长治市| 米脂县| 科尔| 清水河县| 淮南市| 高阳县| 汕尾市| 扶余县| 高州市|