我有2个对象:myObject1myObject2
我试图使用称为myObject1my0bject2方法从increment调用私有变量,但是console.logNaN
有什么方法可以直接从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();





无论哪种方式,这些方法都公开了xmyObject1属性,使其公开。

09-28 13:17