javascript - 在单击处理程序中正确使用绑定(bind)和引用对象值

标签 javascript jquery

我无法理解绑定(bind)的正确使用以及对单击处理程序中打开的过去链接的引用。

该函数接收 4 个链接的数组。我只是想点击打开正确的链接。

链接 2 和 3 之所以有效,是因为它们绑定(bind)到了 window 对象。链接 0 和 1 将在传递的第一个数组上工作,但当新的链接数组传递给函数时,单击时,它将打开前一个链接,而不是最近传递给函数的链接。

我知道向窗口对象添加值是不好的做法,因此我一直在尝试找出更好的方法来实现它,同时更好地掌握绑定(bind)、应用和调用。 (如果这里有必要的话)。

为什么传递的前 4 个链接是正确的,但传递任何其他链接时,它将继续引用并打开初始链接集?

links = function(linksArr) {
    var that = this;
    this.linkArray = linksArr;
    //Create an object from array in attempt to get correct link on event click
    var linkReference = linksArr.reduce(function(all,item,index){
       all[index] = item;
       console.log(all);
       return all;
    },{});
   //Does not work. Attempted use of bind
    $('.link0').on("click", function () {
        window.open(linkReference[0], '_blank');
    }.bind(linkReference));
    //Does not work. Trying to apply the proper links through the apply method
    $('.link1').on("click", function () {
        window.open(linksArr[1], '_blank');
    }.apply(null,linksArr));
    //Works
    $('.link2').on("click", function () {
        window.open(that.linkArray[2], '_blank');
    });
    //Works
    $('.link3').on("click", function () {
        window.open(that.linkArray[3], '_blank');
    });
};`

最佳答案

bind() 使您绑定(bind)的元素成为方法内的“this”。您应该使用“this”作为引用,而不是绑定(bind)时使用的名称。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

关于javascript - 在单击处理程序中正确使用绑定(bind)和引用对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469160/

相关文章:

javascript - 解除绑定(bind)事件不起作用

javascript - 我想创建自己的 html 标签

jquery - django jquery 管理问题

javascript - 用 JavaScript/jQuery 替换 dom 对象中字符串的各种出现的最快、最可靠的方法

jQuery:淡入/淡出计时问题

javascript - 如何在 block 显示中调整图像大小? (javascript 或 react )

javascript - 我可以使用 javascript 轻松地将所有表单数据传递到新的弹出窗口吗?

javascript - 与新版本高音扬声器共享选项

来自另一个 js 函数的 JQuery 自动完成源

javascript - 如何让 JQuery 库之间不发生冲突