1. 程式人生 > 實用技巧 >js裡的__proto__和prototype

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__)

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__)