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