說我們有一個代碼示例這樣的設置屬性的困惑:因爲在子對象obj2
屬性關於父對象從子對象的JavaScript
var obj1={ prop:1 };
var obj2=Object.create(obj1);
obj2.prop=2;
console.log(obj1.prop);
在這裏,我們將不得不爲1
輸出prop
將被遮蔽。然而,當我這樣做:
var obj1={ prop:{subProp:1} };
var obj2=Object.create(obj1);
obj2.prop.subProp=2;
console.log(obj1.prop.subProp);
這裏出奇我發現輸出是2
儘管被子對象的變化值。爲什麼不在這裏發生可變陰影。換句話說,爲什麼在obj2
上創建了一個名爲prop
的新屬性,爲什麼在這裏操作父對象(obj1
)的prop
?
編輯:如果我做了以下
var obj1={ prop:1 };
var obj2=Object.create(obj1);
var isPresent=obj2.hasOwnProperty('prop');
console.log(isPresent);
這裏輸出將是錯誤的。但是:
var obj1={ prop:1 };
var obj2=Object.create(obj1);
var isPresent=obj2.hasOwnProperty('prop');
console.log(isPresent);
obj2.prop=2;
isPresent=obj2.hasOwnProperty('prop');
console.log(isPresent);
在這裏,你可以行後看到obj2.prop=2
輸出是真實的。這也令我困惑。
您可能會發現[*的分辨率對象上的屬性名稱*](http://www.jibbering.com/faq/notes/closures/#clResO)很有用。 – RobG