如何在类的方法中使变量可用?

时间:2014-10-27 13:57:45

标签: javascript

我为这个问题道歉,刚开始学习Javascript。

我有两种方法:

Manager.prototype.filters = function () {
         var user = [];
           ...

Manager.prototype.filters_main = function () {
         var user = [];
           ...

我需要让该物业'用户'可用于2种方法(filters,filters_main)。这样他们就可以使用共享变量(用户)了。 如何写?

3 个答案:

答案 0 :(得分:1)

你必须在这里理解基于原型的继承。

var Manager = function() {
    this.user = [];
}

var manager = new Manager();

这些行将定义Manager构造函数并创建一个新对象。当你致电new Manager()时,会发生什么:

  1. 创建一个新的空对象:{}

  2. 构造函数中的代码将使用这个新的空对象运行,其值为this。因此,它会将新对象(user)的{}属性设置为空数组。

  3. 新对象的__proto__属性将设置为Manager.prototype的值。因此,在没有您看到的情况下会发生这种情况:manager.__proto__ = Manager.prototype

  4. 然后,您希望使用继承在原型对象上定义新方法。请记住,原型是一个普通的JS对象。不是构造函数,而是对象。因此,从Manager函数创建的每个对象都将其__proto__属性设置为相同的对象。

    然后,您开始在原型对象上定义新方法,例如filters函数。当您稍后调用manager.filters()时,它将首先查找filters函数的自己的属性,但不会找到它。那么,它将用于它的原型属性,如果能找到它。然后manager将运行原型上定义的filters函数,但使用自身(manager)作为上下文,作为函数内的this

    因此,要在user函数中使用filters属性,您所要做的就是:

    Manager.prototype.filters = function () {
         this.user = ...;
    }
    
    Manager.prototype.filters_main = function () {
         this.user = ...;
    }
    

    并且您将操纵构造对象时定义的相同user属性。

答案 1 :(得分:0)

Manager定义中定义变量:

function Manager() {
    this.user = [];
}

现在你应该可以在你的过滤功能中使用它了:

Manager.prototype.filters = function() {
    // Use it:
    if (this.user.indexOf(...) != -1) {
        ...
    }
};

然后你可以照常继续:

var manager = new Manager();
manager.user = ["user1", "user2"];
var filters = manager.filters();

答案 2 :(得分:0)

将它添加到正文中:

function Manager() { 
   this.user = []; 
}

Manager.prototype.filters = function () {
   alert(this.user)
}

var m = new Manager();
m.user = [11,22,33]
m.filters();