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

How to make the variable available in the methods of the class?

本文关键字:方法 何使 变量      更新时间:2023-09-26

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

我有两种方法:

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

我需要使属性"user"可用于 2 种方法(过滤器、filters_main(。以便他们可以使用共享变量(用户(。怎么可能写?

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

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

这些行将定义一个Manager构造函数并创建一个新对象。当您调用new Manager() 时,发生的情况是:

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

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

  3. 新对象的 __proto__ 属性将设置为 Manager.prototype 的值。所以,这发生在你看不到的情况下:manager.__proto__ = Manager.prototype.

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

然后,开始在原型对象上定义新方法,如filters函数。稍后调用 manager.filters() 时,它将首先查找自己的 filters 函数属性,但找不到它。因此,然后,它将追求其原型属性,并且在那里找到它。 然后manager将运行在原型上定义的filters函数,但使用自身(manager(作为上下文,作为函数内部的this

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

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

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

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();

将其添加到正文中:

function Manager() { 
   this.user = []; 
}
Manager.prototype.filters = function () {
   alert(this.user)
}
var m = new Manager();
m.user = [11,22,33]
m.filters();
相关文章: