我想知道如何在javascript中读取类的另一个类/实例中的局部变量的值。
例如:
我在课堂上有一个方法:
myClass1.prototype.myMethod0 = function()
{
this._myVar = null; //initialize this._myVar
}
myClass1.prototype.myMethod1 = function(list)
{
this._myVar = msg.list;
}
和
myClass1.prototype.myMethod2 = function()
{
//do something
// and update the list like say:
list1 = this._myVar; //access the this_myVar.
}
在我的另一个人说,
myClass2.prototype.myMethod = function()
{
//call the class1's method here..
myClass1.prototype.myMethod2();
}
myMethod2
是一个回调,我将其绑定在myClass2
。
这意味着,实际上,myMethod2
的调用方式如下:myClass1.callback();
但我的问题是,当我致电myClass1.prototype.myMethod2();
时,list1 = this._myVar;
未获得更新,而且正在变为undefined
。我没有得到相同的修复。
问题是变量,“this._myVar”在myclass1的myMethod2中是“未定义的”
答案 0 :(得分:0)
有什么可能,但不是你做的方式:
如果没有var
关键字,变量不是本地变量,而是全局变量。因此,您的代码实际上创建了一个全局变量this_myVar
,该变量由同一页面上的所有JavaScript代码共享。
list1
,则 myMethod1()
将被取消定义。
参见[这里有关于JavaScript OO编程的介绍] [1]。
[编辑] 我看到您更新了问题,现在可以通过this
访问变量了。仅当函数作为“方法”调用时,才会分配自动变量this
。
myClass1.prototype.myMethod2()
将调用原始定义,this
将被定义。
你必须使用这样的代码:
var inst = new myClass1();
inst.myMethod2();
在myMethod2
内,变量this
与inst
具有相同的值,如果您这样称呼它。
[EDIT2] 如果您想访问实例属性,那么必须通过myMethod2()
的实例调用myClass1
- JavaScript不会试着仔细阅读你的代码可能意味着什么。
因此,当您想要调用myClass1
的任何方法时,您必须拥有它的实例。尝试在myClass2
中创建一个:
var myClass2 = function() {
this.inst1 = new myClass1();
}
myClass2.prototype.myMethod = function() {
this.inst1.myMethod2();
}
或者,您必须将实例传递给方法:
myClass2.prototype.myMethod = function(inst1) {
inst1.myMethod2();
}
但是,如果您像任何其他全局方法一样调用myMethod2()
,this
将没有任何有用的值。可以说“当我调用前缀为myClass1.prototype.
的函数时,请查找myClass1
的实例并将其放入this
”。当有15个这种类型的实例时,JavaScript会做什么?随机选择一个?
答案 1 :(得分:0)
这里this_myVar是函数内部的局部变量,所以一旦你退出函数
它的价值已经丢失。
所以你会得到一个未定义的值。
为了保留这个值,你必须将this_myVar声明为类中的datamember。