最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript構(gòu)造函數(shù)詳解

 更新時(shí)間:2015年12月27日 09:43:36   投稿:mrr  
構(gòu)造函數(shù)就是初始化一個(gè)實(shí)例對(duì)象,對(duì)象的prototype屬性是繼承一個(gè)實(shí)例對(duì)象。本文給大家分享javascript構(gòu)造函數(shù)詳解,對(duì)js構(gòu)造函數(shù)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧

構(gòu)造函數(shù)就是初始化一個(gè)實(shí)例對(duì)象,對(duì)象的prototype屬性是繼承一個(gè)實(shí)例對(duì)象。

  構(gòu)造函數(shù)注意事項(xiàng):

1.默認(rèn)函數(shù)首字母大寫(xiě)

2.構(gòu)造函數(shù)并沒(méi)有顯示返回任何東西。new 操作符會(huì)自動(dòng)創(chuàng)建給定的類(lèi)型并返回他們,當(dāng)調(diào)用構(gòu)造函數(shù)時(shí),new會(huì)自動(dòng)創(chuàng)建this對(duì)象,且類(lèi)型就是構(gòu)造函數(shù)類(lèi)型。

3.也可以在構(gòu)造函數(shù)中顯示調(diào)用return.如果返回的值是一個(gè)對(duì)象,它會(huì)代替新創(chuàng)建的對(duì)象實(shí)例返回。如果返回的值是一個(gè)原始類(lèi)型,它會(huì)被忽略,新創(chuàng)建的實(shí)例會(huì)被返回。    

 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.因?yàn)闃?gòu)造函數(shù)也是函數(shù),所以可以直接被調(diào)用,但是它的返回值為undefine,此時(shí)構(gòu)造函數(shù)里面的this對(duì)象等于全局this對(duì)象。this.name其實(shí)就是創(chuàng)建一個(gè)全局的變量name。在嚴(yán)格模式下,當(dāng)你補(bǔ)通過(guò)new 調(diào)用Person構(gòu)造函數(shù)會(huì)出現(xiàn)錯(cuò)誤。

 

5.也可以在構(gòu)造函數(shù)中用Object.defineProperty()方法來(lái)幫助我們初始化:

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

6.在構(gòu)造函數(shù)中使用原型對(duì)象      

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

但是如果方法比較多的話,大多人會(huì)采用一種更簡(jiǎn)潔的方法:直接使用一個(gè)對(duì)象字面形式替換原型對(duì)象,如下:      

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

這種方式非常流行,因?yàn)槟悴挥枚啻捂I入Person.prototype,但有一個(gè)副作用你一定要注意:

使用字面量形式改寫(xiě)了原型對(duì)象改變了構(gòu)造函數(shù)的屬性,因此他指向Object而不是Person。這是因?yàn)樵蛯?duì)象具有一個(gè)constructor屬性,這是其他對(duì)象實(shí)例所沒(méi)有的。當(dāng)一個(gè)函數(shù)被創(chuàng)建時(shí),它的prototype屬性也被創(chuàng)建,且該原型對(duì)象的constructor屬性指向該函數(shù)。當(dāng)使用對(duì)象字面量形式改寫(xiě)原型對(duì)象時(shí),其constructor屬性將被置為泛用對(duì)象Object.為了避免這一點(diǎn),需要在改寫(xiě)原型對(duì)象的時(shí)候手動(dòng)重置constructor,如下:

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

再次測(cè)試:

p1.constructor===Person

true 

p1.constructor===Object

false

p1 instanceof Person

true

相關(guān)文章

最新評(píng)論

马龙县| 乌兰县| 綦江县| 吴旗县| 霍林郭勒市| 宣化县| 望城县| 章丘市| 东兰县| 罗田县| 丹阳市| 汝南县| 大竹县| 申扎县| 东丽区| 成武县| 金溪县| 昌宁县| 明水县| 屏东县| 重庆市| 沙坪坝区| 扶余县| 陈巴尔虎旗| 阿尔山市| 宜州市| 徐水县| 丰宁| 都江堰市| 西城区| 确山县| 隆昌县| 历史| 中江县| 汪清县| 元朗区| 台北市| 定远县| 化德县| 广灵县| 安宁市|