我为这个问题道歉,刚开始学习Javascript。
我有两种方法:
Manager.prototype.filters = function () {
var user = [];
...
Manager.prototype.filters_main = function () {
var user = [];
...
我需要让该物业'用户'可用于2种方法(filters,filters_main)。这样他们就可以使用共享变量(用户)了。 如何写?
答案 0 :(得分:1)
你必须在这里理解基于原型的继承。
var Manager = function() {
this.user = [];
}
var manager = new Manager();
这些行将定义Manager
构造函数并创建一个新对象。当你致电new Manager()
时,会发生什么:
创建一个新的空对象:{}
。
构造函数中的代码将使用这个新的空对象运行,其值为this
。因此,它会将新对象(user
)的{}
属性设置为空数组。
新对象的__proto__
属性将设置为Manager.prototype的值。因此,在没有您看到的情况下会发生这种情况:manager.__proto__ = Manager.prototype
。
然后,您希望使用继承在原型对象上定义新方法。请记住,原型是一个普通的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();