我有2个对象:myObject1
和myObject2
。
我试图使用称为myObject1
的my0bject2
方法从increment
调用私有变量,但是console.log
说NaN
。
有什么方法可以直接从myObject1
方法调用myObject2
变量吗?也许以某种方式扩展它?
var myObject1 = function() {
var x = 0;
return{}
}();
var myObject2 = function() {
return{
increment: function() {
myObject1.x +=1;
console.log(myObject1.x);
}
}
}();
myObject2.increment();
最佳答案
在var x
中指定myObject1
时,您会将变量声明为私有。唯一可以访问该变量的是myObject1
中的方法。如您所述,此变量是私有的。
您不清楚是否要使其私有化,所以我假设您只是想访问它。您可以在这里做几件事。
您可以通过myObject1
将变量附加为this
的对象属性。 this
指的是当前作用域(myObject1
),因此在this.x
中说myObject1
就是说myObject1.x
。从该函数中,您将需要返回this
,以便其实例可以访问其所有公共属性。
var myObject1 = function() {
this.x = 0;
return this;
}();
var myObject2 = function() {
return {
increment: function() {
myObject1.x +=1;
console.log(myObject1.x);
}
}
}();
myObject2.increment();
您也可以只返回所需的属性,在本例中为
x
。在这种情况下,您可以更好地控制返回的内容,并且获得与上述相同的结果。var myObject1 = function() {
var x = 0;
return {
x: x,
};
}();
var myObject2 = function() {
return {
increment: function() {
myObject1.x +=1;
console.log(myObject1.x);
}
}
}();
myObject2.increment();
无论哪种方式,这些方法都公开了
x
的myObject1
属性,使其公开。