当传递一个对象作为参数并使用它通过 Object.create 创建一个单独的对象时,你会得到一个空对象。但是,如果您随后使用这个新对象来引用在初始对象中设置的特定参数,您将获得初始对象的参数值。
我希望这些值包含在新对象中,或者至少无法在其中访问。
var o = { baz: [] };
o.rrr = { a: 1 };
console.log( o, '"o" before timeout called' );
setTimeout(function() { n(o) }, 1000); // setting delay
function n(x) {
console.log( 'x - what we passed', x );
var obj = Object.create( x );
console.log( obj, '"obj" before enhancements is empty' );
console.log( obj.rrr, 'but "obj.rrr" do exist' );
obj.baz = [];
obj.baz.push( 'new value' );
console.log( obj, '"obj" after enhancements contain "baz" only' );
console.log( obj.rrr, 'but "obj.rrr" still exist' );
console.log( o, '"o" after timeout ended' );
console.log( '---- THE END ----' );
}
console.log( o, '"o" after timeout called' );
为何如此?
你能在保持结构的同时摆脱这些引用吗?
您是否可以从一开始就在新对象中设置这些值(例如克隆它)?
慕尼黑的夜晚无繁华
相关分类