国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

__proto__和prototype

raise_yang / 3307人閱讀

摘要:屬性對性能影響非常嚴重,不建議使用。當你創建函數時,會為這個函數自動添加屬性。構造函數原型的默認指向自身。所有對象均從繼承屬性。結果見下圖普通對象是構造函數的實例,所以普通對象的原型是。總結和其它函數由產生,的是他自己。

_proto_

每個對象都有一個__proto__(前后各兩個下劃線)屬性來標識自己所繼承的原型對象。__proto__屬性對性能影響非常嚴重,不建議使用。

prototype

只有函數才有prototype屬性。當你創建函數時,JS會為這個函數自動添加prototype屬性。構造函數原型的constructor默認指向自身。

function Person(){
   this.name="aaa";
}
Person===Person.prototype.constructor // true
console.log(Person.prototype);// 結果見下圖

Object和Function

每個內置對象都是一個native object。一個內置的對象同時也是一個構造函數。function是一種對象類型。

Function

function是內置Function的實例,即普通函數是Function的實例。因此普通函數的constructor是Function。Function的constructor還是他自己。

function Person(){var a=1;}
Person.constructor    //function Function() { [native code] }

Function     //function Function() { [native code] }
Function.constructor   //function Function() { [native code] }
Function===Function.constructor  //true

函數都有prototype屬性和__proto__ 屬性。函數的__proto__ 屬性均是function () { [native code] }。可以這樣理解,function既是對象,又是函數。function作為對象,有__proto__ 屬性,因為__proto__ 屬性指向構造函數的原型,而function是由Function創建的,因此普通函數.__proto__ =Function.prototype。

 function Person(){var a=1;}
 Person.__proto__===Function.prototype   ///true
 Function.prototype //function () { [native code] }

Function.prototype和Function.__proto__為同一對象。這是由于構造Function的是他自己,根據普通函數.__proto__ =Function.prototype,所以Function.__proto__ =Function.prototype

Function.prototype  //function () { [native code] }
Function.__proto__   // function () { [native code] }
Function.prototype===Function.__proto__   //true

Function.prototype的__proto__是Object.prototype。可以這樣理解:Function.prototype也是一個原型對象,而普通對象的原型是Object.prototype,所以

Function.prototype.__proto__===Object.prototype //true

注意:使用 Function.prototype.bind創造的函數,沒有prototype屬性。

Object

Object.__proto__是Function.prototype。因為Object本身是個(構造)函數,是Function的實例。

Object.__proto__      //function () { [native code] }
Object.constructor    //function Function() { [native code] }

原型鏈的盡頭(root)是Object.prototype。所有對象均從Object.prototype繼承屬性。

Object.prototype.__proto__   // null

某個對象.__proto__ =構造函數.prototype 。

var a={};
a.__proto__===Object.prototype //true
a.__proto__ //結果見下圖

普通對象是Object構造函數的實例,所以普通對象的原型是Object.prototype。

 function Person(){this.name="aa";}
 var b=new Person();
 b.__proto__===Person.prototype; //true
 b.__proto__ //結果見下圖

上圖中b對象是Person構造函數的實例,所以b對象的原型是Person.prototype。

總結

1. Object和其它函數由Function產生,Function的constructor是他自己。

2. 一個對象必定有__proto__,而原型鏈的頂端是Object.prototype。

3. Object.prototype 是對象,但是不是通過Object函數創建的。因為Object.prototype.__proto__為null。

4. Object的__proto__是Function.prototype,但是Function.prototype也是一個原型對象,因此Function.prototype.__proto__為Object.prototype。

參考自:
從__proto__和prototype來深入理解JS對象和原型鏈
Function

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82909.html

相關文章

  • 傻傻分不清的__proto__prototype

    摘要:今天同事小英童鞋問了我一個問題小英童鞋認為的原型對象是,所以會繼承的屬性,調用相當于調用,但結果不是一個方法。構造函數創建對象實例函數有兩個不同的內部方法和。如果不通過關鍵字調用函數,則執行函數,從而直接執行代碼中的函數體。 今天同事小英童鞋問了我一個問題: function Foo(firstName, lastName){ this.firstName = firstNam...

    YancyYe 評論0 收藏0
  • js內功修煉之九陽神功--原型鏈

    摘要:寫在前面如果說是一本武學典籍,那么原型鏈就是九陽神功。那么,如何修煉好中的九陽神功呢真正的功法大成的技術是從底層上去理解,那種工程師和碼農的區別就在于對底層的理解,當你寫完一行代碼,或者你遇見一個解決的速度取決于你對底層的理解。 寫在前面 如果說JavaScript是一本武學典籍,那么原型鏈就是九陽神功。在金庸的武俠小說里面,對九陽神功是這樣描述的:練成「九陽神功」后,會易筋洗髓;生出...

    蘇丹 評論0 收藏0
  • js內功修煉之九陽神功--原型鏈

    摘要:寫在前面如果說是一本武學典籍,那么原型鏈就是九陽神功。那么,如何修煉好中的九陽神功呢真正的功法大成的技術是從底層上去理解,那種工程師和碼農的區別就在于對底層的理解,當你寫完一行代碼,或者你遇見一個解決的速度取決于你對底層的理解。 寫在前面 如果說JavaScript是一本武學典籍,那么原型鏈就是九陽神功。在金庸的武俠小說里面,對九陽神功是這樣描述的:練成「九陽神功」后,會易筋洗髓;生出...

    Profeel 評論0 收藏0
  • js內功修煉之九陽神功--原型鏈

    摘要:寫在前面如果說是一本武學典籍,那么原型鏈就是九陽神功。那么,如何修煉好中的九陽神功呢真正的功法大成的技術是從底層上去理解,那種工程師和碼農的區別就在于對底層的理解,當你寫完一行代碼,或者你遇見一個解決的速度取決于你對底層的理解。 寫在前面 如果說JavaScript是一本武學典籍,那么原型鏈就是九陽神功。在金庸的武俠小說里面,對九陽神功是這樣描述的:練成「九陽神功」后,會易筋洗髓;生出...

    morgan 評論0 收藏0

發表評論

0條評論

raise_yang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<