在javascript中使用方法的局部变量

时间:2012-07-06 10:27:54

标签: javascript

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

2 个答案:

答案 0 :(得分:0)

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

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

  2. 如果从未调用过list1,则
  3. myMethod1()将被取消定义。

  4. 参见[这里有关于JavaScript OO编程的介绍] [1]。

    [编辑] 我看到您更新了问题,现在可以通过this访问变量了。仅当函数作为“方法”调用时,才会分配自动变量this

    myClass1.prototype.myMethod2()将调用原始定义,this将被定义。

    你必须使用这样的代码:

    var inst = new myClass1();
    inst.myMethod2();
    

    myMethod2内,变量thisinst具有相同的值,如果您这样称呼它。

    [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。