0

我想知道我们如何在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 中是“未定义”

4

2 回答 2

0

做什么是可能的,但不是你做的方式:

  1. 如果没有var关键字,变量就不是局部变量而是全局变量。因此,您的代码实际上创建了一个全局变量this_myVar,该变量由同一页面上的所有 JavaScript 代码共享。

  2. list1myMethod1()如果从未调用过,将是未定义的。

请参阅 [此处了解 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 应该做什么?随机选择一个?

于 2012-07-06T10:34:43.030 回答
0

这里 this_myVar 是函数内部的一个局部变量,所以一旦你从函数中出来

它的价值丢失了。

所以你会得到一个未定义的值。

为了保留值,您必须将 this_myVar 声明为类内的数据成员。

于 2012-07-06T10:49:12.657 回答