1
我有以下代碼javascript對象繼承是如何工作的?
var createObj = function (prop1, prop2) {
var obj = {
prop1: prop1,
prop2: prop2
}
Object.defineProperty(obj, "prop3", {
get: function() {
return this.prop1 + ' ' + this.prop2;
},
configurable: true
});
return obj;
}
var createSecObj = function() {
var obj = createObj("prop1", "prop2");
var prop3 = obj.prop3;
Object.defineProperty(obj, "prop3", {
get: function() {
return prop3;
}
});
return obj;
}
我想學習如何Javascript繼承工作。
比方說作爲
myObj = createSecObj();
然後myObj.prop3的值被記錄到控制檯
console.log(myObj.prop3) // "prop1 prop2"
創建一個名爲MyObj中的對象,然後myObj.prop1變更爲「嗒嗒」使用
myObj.prop1 = "blah"
再次,如果myObj.prop3記錄到控制檯,它會導致「prop1 prop2」。而不是「blah prop2」。
console.log(myObj.prop3) // results "prop1 prop2", expecting "blah prop2"
看起來像obj.prop3仍然引用其父對象。這甚至是什麼原因被重新定義在子對象中。有人可以請詳細解釋一下嗎?
謝謝你的回答:)我想重新使用代碼createObj,prop3而不重寫它作爲返回this.prop1 +''+ this.prop2;內部createSecObj.prop3 getter。請考慮這是爲了學習的目的。不適用於生產級別的應用:)只想檢查事情如何完成:)請原諒我的糟糕英語。 –
如果你只是想引用繼承的prop3屬性,你可以寫'return Object.getPrototypeOf(this).prop3;',但這樣做沒有意義。看來你不想覆蓋這個屬性,所以不要這樣做。 –