js裡的__proto__和prototype
阿新 • • 發佈:2020-07-08
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__)
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__)