最后,在以下代码中,我看到了关闭的味道。

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属性。

由于object1object2没有名为a的属性,但是它们的原型具有,因此,当您修改masterObjecta属性时,该值对于以masterObject为他们的原型。

即使您给object3一个名为a的属性,但您仍然可以访问原型的a属性,该属性保持不变:

object3.__proto__.a; // "new masterObject value"


基本上,通过给object3一个名为a的属性,可以将对象的新属性放在原型属性的“前面”。

关于javascript - javascript:object,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14181160/

10-11 05:40