js 原型鏈怎麼理解?

時間 2021-05-06 20:30:07

1樓:江南公子旭

function animal(){};

function dog(){};

animal.price = 2000;

dog.prototype = animal;

解:因為這裡這是將這個函式的prototype屬性賦值成了 animal ,

並不是他 new 出來的乙個物件 ,

所以animal 不是他的建構函式 。

所以dog函式中沒有price 這個屬性 ,只有prototype.price這個屬性。

所以就會到__proto__這個屬性中去找這個屬性中也沒有就會到 dog這個函式的建構函式Function()的prototype屬性中去找

但是這個屬性中永遠也找不到所以就報了個undefinedvar tidy = new dog();

解:而這裡dog 是 tidy 的建構函式所以。。。。。。。不寫了console.log(dog.price) //為什麼輸出 undefined

console.log(tidy.price)今天剛看到這個東西,

不知道對不對有錯的希望各位給教導下。

2樓:吳健

原題:var animal = function(){};

var dog = function(){};

animal.price = 2000;//

dog.prototype = animal;

var tidy = new dog();

console.log(dog.price) //為什麼輸出 undefined

console.log(tidy.price) //為什麼輸出 2000

因為原型鏈是依賴於__proto__,而不是prototype。

dog是函式物件,本身沒有price屬性,此時dog的__proto__屬性指向的是其建構函式的原型。

dog的建構函式就是Function,因為var dog = function(){};語句實際上是var dog = new Function();,所以,dog.__proto__ === Function.prototype;而Function.

prototype並沒有price屬性,如果加一句:Function.prototype.

price = 123;那麼第乙個列印就是123;

如此依賴,tidy是乙個普通物件,由dog函式構造而來,因此tidy__proto__ == dog.prototype == animal;所以當tidy上找不到price屬性時,會從__proto__尋找原型上的方法,找到animal物件,animal物件有price屬性,則返回。

3樓:蔡雨荷

可以看看dog裡面有什麼:

dog裡面並沒有price這個屬性,所以是undifined。

再看tidy:

tidy裡面是有price的。這裡實際上實現了繼承。建構函式dog的原型指向animal,而animal帶有price這個屬性。

tidy為dog的例項,能共享建構函式原型的方法和屬性。所以能得到price。

怎麼理解JS原型鏈中Function原型物件的 proto 指向Object的原型物件?

冷月騎士 不僅如此,Function.constructor Function 也是成立的,加上你的問題,也就是下圖中紅線部分,都是成立的。非常直觀的說明了以下問題 1.JS中,一切皆物件 任何乙個值,不管是什麼型別,最後都能鏈路到 Object 2.函式是一等公民 畢竟Object 型別,也是通過...

如何理解原型鏈中的setter和屬性遮蔽之間的關係?

卓怡 這個問題我弄明白了,自己回答一下吧 varanotherObject getb a 2 varmyObject Object create anotherObject 對myObject操作 myObject.a 7 呼叫了setter,但是myObject.a 的仍然是7但是如果對c操作的話...

產業鏈,怎麼理解?

二師兄 像溫州甌北,閥門企業有幾千家,乙個閥門產品裡面的幾十個配件,上街隨便一逛就能買齊,在這裡自己想要做一台閥門真的好簡單,有的公司因為土地成本搬到外省去了,結果發現做閥門好麻煩,好多配件當地都買不到,又只能跑回甌北採購。有些配件市面上使用量很少,價值也很低,但就是缺一不可,很多也只有甌北這個地方...