最后,在以下代码中,我看到了关闭的味道。
function create(parent) {
var F = function() {};
F.prototype = parent;
return new F();
}
var masterObject = {a: "masterObject value"}
var object1 = create(masterObject);
var object2 = create(masterObject);
var object3 = create(masterObject);
var object3.a = "overridden value";
object1.a; // "masterObject value"
object2.a; // "masterObject value"
object3.a; // "overridden value"
masterObject.a = "new masterObject value"//value is changed now
object1.a; // "new masterObject value"
object2.a; // "new masterObject value"
object3.a; // "overridden value"
永久更改object1.a,abject2.a的值。这是因为我对全局变量进行了更改还是闭包的影响?因为我没有再次调用Create()函数,为什么值会自动更改?
最后一个问题“我在全局变量中进行更改时是否会自动使用tht变量影响所有对象?”以使该变量生效,我应该再次调用Create()函数,不是吗?
最佳答案
当您访问object3.a
时,JavaScript首先查看对象的属性。如果对象没有名为a
的属性,则接下来检查对象的原型。
设置object3.a = "overridden value";
赋予object3
一个名为a
的属性。它不会影响原型的a
属性。
由于object1
和object2
没有名为a
的属性,但是它们的原型具有,因此,当您修改masterObject
的a
属性时,该值对于以masterObject
为他们的原型。
即使您给object3
一个名为a
的属性,但您仍然可以访问原型的a
属性,该属性保持不变:
object3.__proto__.a; // "new masterObject value"
基本上,通过给
object3
一个名为a
的属性,可以将对象的新属性放在原型属性的“前面”。关于javascript - javascript:object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14181160/