如何使变量在类的方法中可用
How to make the variable available in the methods of the class?
我为这个问题道歉,我刚刚开始学习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()
时,发生的情况是:
将创建一个新的空对象:
{}
。构造函数中的代码将使用这个新的空对象作为
this
的值运行。因此,它将新对象({}
(的user
属性设置为空数组。新对象的
__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();
- 使用 CSS 或 javascript/jQuery,我会使用哪种方法来使我的网站的导航栏看起来更 3d-ish
- 有什么方法可以使页面无法刷新吗
- 有一种方法可以使jslint在使用控制台时显示警告或错误
- 有没有任何方法可以使<选择>转到url
- 有没有任何方法可以使这个名称生成循环运行最短的秒数
- JSXGraph 中有什么方法可以使图像不透明
- 有没有一种方法可以使Iframe根据需要进行扩展
- 将元素属性与 javascript 折叠方法结合使用时,引导折叠无法正常工作
- 保护公共方法,使其在 javascript 中被 chield 对象覆盖
- Angular 的控制器方法如何使$scope可用于我的函数参数
- 有哪些方法可以使客户端更难操作 DOM
- 变量在不同的方法中使用时是“未定义的”
- 有什么方法可以使SVG对象可单击吗
- 有没有一种方法可以使触摸启动事件不会触发点击事件
- 当在模板中使用未声明的指令时,是否有任何方法可以使angular警告我
- 当用户在网页上选择一大块文本时,是否有一种方法可以使该文本保持高亮显示,即使用户在该页面的其他地方单击也是如此
- 是否有一种方法可以使输入元素上存在ngMaxlength属性,但使其具有值“0”;无限”;
- 有没有一种方法可以使;对象.冻结”;当试图更改对象时抛出警告
- 有没有一种方法可以使未被混淆的javascript过期
- jquery 1.7〃;关于“;方法IE8使mshtml.dll崩溃