我无法正确使用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');
});
};`
答案 0 :(得分:1)
bind()
使您绑定的元素成为' this'在方法内部。你应该使用这个'作为参考,而不是你绑定时使用的名称。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind