我是新來的Javascript和有一個關於使用繼承它這是我應該期待看到使用Javascript原型繼承的行爲嗎?
本文的問題是有幫助的,到目前爲止(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#More_flexible_constructors),但我在Chrome的調試器中觀察的行爲似乎並沒有被匹配什麼,我想期待看到。
我有兩種情況:
Base = function() {
this.value = 0;
};
Base.prototype.constructor = Base;
Derived = function() {
Base.call(this);
};
Derived.prototype = new Base();
Derived.prototype.constructor = Derived;
在調試器中我看到這一點:
跨過任務後,我看到這個
實例中的值已更改,但原型中的值尚未更改。這是預期的嗎?
第二種方法我不太明白的是這(在這裏再次引用 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model#More_flexible_constructors(見節「的財產繼承權再訪」)
Base = function() {
};
Base.prototype.constructor = Base;
Base.prototype.value = 0;
// Derived as before...
和之後的底部剪斷代碼分配
值已被添加爲新屬性。這不應該改變原型的價值嗎?或者,我是否明確需要通過原型來訪問價值 - 例如derived.value.prototype.value = 5
任何有關這方面的信息將不勝感激!
謝謝!
UPDATE:
謝謝大家誰回答,原來它是與在適當的時候我不使用的Object.create做。我在我的代碼更新到這一點:
,並在調試器中我得到了我的預期:
這看起來沒錯! :)
謝謝@sixfingeredman和@Bergi對你有所幫助!
是的,這是預期的。 – Bergi
最好不要創建Parent的實例來設置Child的原型。反而使用Object.create繼承和混合插件在這裏詳細解釋:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711 – HMR