js里的__proto__和prototype


1.在JS里,萬物皆對象。方法(Function)是對象,方法的原型(Function.prototype)是對象。因此,它們都會具有對象共有的特點。即:對象具有屬性proto,可稱為隱式原型,一個對象的隱式原型指向構造該對象的構造函數的原型,這也保證了實例能夠訪問在構造函數原型中定義的屬性和方法。

2.方法(Function)方法這個特殊的對象,除了和其他對象一樣有上述proto屬性之外,還有自己特有的屬性——原型屬性(prototype),這個屬性是一個指針,指向一個對象,這個對象的用途就是包含所有實例共享的屬性和方法(我們把這個對象叫做原型對象)。原型對象也有一個屬性,叫做constructor,這個屬性包含了一個指針,指回原構造函數。

1.聲明對象和方法

var a=function(){}
var b={}

 

2.關於__proto__,它是對象上的隱式屬性

console.log(a.__proto__)
console.log(b.__proto__)

 可以看到他們的__proto__不一樣,雖然function也是屬於對象,但func的隱式原型指向構造該對象的構造函數的原型

console.log(a.__proto__.__proto__)
console.log(b.__proto__)

console.log(a.__proto__.__proto__==b.__proto__) // true

3.關於prototype,對象上不具有prototype,只有函數上有

console.log(a.prototype)
console.log(b.prototype)

 prototype下面具有constructor,這個屬性包含了一個指針,指回原構造函數原型 f(),__proto__屬性指向對象構造函數原型 Object()

console.log(a.prototype.constructor.__proto__==a.__proto__) 
console.log(a.prototype.__proto__==a.__proto__.__proto__)
console.log(a.prototype.__proto__==b.__proto__)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM