у нас есть пример кода, как это:Путаница в отношении заходящего собственности родительского объекта от дочернего объекта в JavaScript
var obj1={ prop:1 };
var obj2=Object.create(obj1);
obj2.prop=2;
console.log(obj1.prop);
Здесь мы будем иметь выход как 1
, потому что в дочернем объекте obj2
свойство prop
будут затенены. Однако, когда я делаю это:
var obj1={ prop:{subProp:1} };
var obj2=Object.create(obj1);
obj2.prop.subProp=2;
console.log(obj1.prop.subProp);
Вот удивительно, я считаю, что выход 2
несмотря на то, что значение, изменяющихся на дочернем объекте. Почему здесь нет переменной тени. Другими словами, почему не создано новое свойство, называемое prop
, на obj2
и почему здесь обрабатывается prop
родительского объекта (obj1
)?
EDIT: Если я сделать следующее
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
выход верно. Это меня тоже смущает.
Вы можете найти [* The Resolution имен объектов на объектах *] (http://www.jibbering.com/faq/notes/closures/#clResO). – RobG