处理 jQuery 事件时在 JavaScript 类中覆盖的 'this' 关键字
'this' keyword overriden in JavaScript class when handling jQuery events
我用一个方法在JavaScript中定义了一个类:
function MyClass(text) {
this.text = text;
}
MyClass.prototype.showText = function() {
alert(this.text);
}
然后,我使用 jQuery 定义了一个充当单击事件的处理程序的方法:
function MyClass(text) {
this.text = text;
$('#myButton').click(this.button_click);
}
MyClass.prototype.showText = function() {
alert(this.text);
};
MyClass.prototype.button_click = function() {
this.showText();
};
当我单击该按钮时,它失败说:
对象 #
没有方法 'showText'
似乎 jQuery 点击事件处理程序中的this
引用 HTML 元素本身,而不是引用MyClass
对象的实例。
我该如何解决这种情况?
可用的 jsFiddle 可用: http://jsfiddle.net/wLH8J/
这是预期的行为,请尝试:
function MyClass(text) {
var self = this;
this.text = text;
$('#myButton').click(function () {
self.button_click();
});
}
或在较新的浏览器中(使用 bind):
function MyClass(text) {
this.text = text;
$('#myButton').click(this.button_click.bind(this));
}
或使用 jquery 代理:
function MyClass(text) {
this.text = text;
$('#myButton').click($.proxy(this.button_click, this));
}
延伸阅读:
- http://www.quirksmode.org/js/this.html
this
是在调用函数时确定的,而不是在定义函数时确定的。您已将该函数复制到单击处理程序,因此当调用它时,它不会与MyClass
相关联,并且this
也不是您想要的。
您需要使用闭包将this
的值存储在不同的变量中。
function MyClass(text) {
this.text = text;
var self = this;
var click_handler = function () { self.button_click(); };
$('#myButton').click(click_handler);
}
相关文章:
- JavaScript 中的嵌套函数和 “this” 关键字
- Javascript 对象和 this 关键字
- 将“this”关键字发送到对象中
- 如何使用“this”关键字来调用a
- 使用关键字“this”有什么好处
- 组合类和事件监听器:`this`关键字
- 将this关键字与selectedIndex一起使用的优势
- javascript中的关键字THIS作为全局命名空间
- 在forEach中调用类函数:Javascript如何处理“this”关键字
- 使用“this”关键字响应类行为
- Javascript 'this' 关键字 在嵌套函数中
- Javascript 关键字 THIS 和 ELEMENT
- 使用 RhinoScriptEngine,我如何更改 javascript 关键字“this”所指的内容
- 当用作函数参数/agrument时,关键字this指的是什么
- Javascript函数和对象使用关键字'this'不工作
- 为什么关键字“this”在HTML和JS中不起作用
- 如何在javascript中使用关键字this
- 在 lambda 中使用关键字 this 与带有 Typescript 的函数时会发生什么
- 在使用对象文字表示法定义的模块中使用关键字this的最佳实践
- 关键字this没有给我当前对象,只有它的父对象.如何得到当前对象