在单击处理程序中正确使用绑定和引用对象值

时间:2017-08-02 19:11:37

标签: javascript jquery

我无法正确使用bind并在我的on click处理程序中打开过去链接的引用。

此函数接收4个链接的数组。我只想在点击时打开正确的链接。

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

我知道向窗口对象添加值是不好的做法,所以我一直试图找到一种更好的方法来实现它,同时更好地掌握绑定,应用和调用。 (如果有必要的话)。

为什么传递的前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');
    });
};`

1 个答案:

答案 0 :(得分:1)

bind()使您绑定的元素成为' this'在方法内部。你应该使用这个'作为参考,而不是你绑定时使用的名称。

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