javascript - javascript中Java的final相当于什么

标签 javascript

这是我的代码无法正常工作:

$(document).ready(function() {
    for (var i = 0; i < 3; i++) {
        var bt = new HrButton("btn" + i);                    
        bt.setOnclick(function() {
            alert(bt.name + " clicks = " + bt.cntClick);
            bt.cntClick = bt.cntClick + 1;
        });
        $("#container").append(bt.toHtml());
    }
});

如何在函数内维护 bt 的三个实例。现在,bt 在每次 onclick 中引用 btn2

最佳答案

如果setOnclick实现得很好,你应该能够做到:

bt.setOnclick(function() {
    alert(this.name + " clicks = " + this.cntClick);
    this.onclick = this.cntClick + 1;
});

否则,您需要为每个回调函数创建一个新作用域,以便它们各自拥有自己的 bt。一种方法是:

bt.setOnclick(function(bt){
    return function(){
        alert(bt.name + " clicks = " + bt.cntClick);
        bt.onclick = bt.cntClick + 1;
    };
}(bt));

评论回复

要实现 setOnClick 以便 this 引用回调中的相关 HrButton(而不是 element),您可以使用以下代码代码(仅适用于现代浏览器,unless you SHIM bind):

var self = this;
self.setOnClick = function(fnOnClick) {
    element.onclick = fnOnClick.bind(self);
};

由于您使用的是 jQuery,因此以下代码将是跨浏览器的等效代码:

var self = this;
self.setOnClick = function(fnOnClick) {
    element.onclick = $.proxy(fnOnClick, self);
};

否则,这将适用于所有浏览器,无需任何库,并且只是可读性稍差:

var self = this;
self.setOnClick = function(fnOnClick) {
    element.onclick = function(event) {
        return fnOnClick.call(self, event);
    };
};

关于javascript - javascript中Java的final相当于什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660217/

相关文章:

javascript - 在 Zend_Auth 中, session 过期时重定向到新页面

javascript - Jquery 嵌套 LI 元素在选项卡式内容 UL LI 列表中

JavaScript play() 函数在 Chrome 中不起作用

javascript - 如何在 javascript 中使用 html 标签?

javascript - 通过jQuery将音频文件加载到HTML5音频播放器

javascript - 事件未在使用 Reactjs 新创建的窗口上触发

javascript - .replaceWith() 在 jQuery 1.9+ 中不起作用

javascript - ejs中不能for循环

javascript - Jquery将两个数组(键,值)关联成一个具有重复键的数组

javascript - 汇总 JSON 数据