我看过JavaScript的bind方法,我不确定在哪种情况下我应该使用它。以下从卡片组(阵列)中获取随机卡的示例是否适合使用该方法:
function getRandomElementFromArray () {
return this.splice( Math.floor( Math.random() * this.length ) )[0];
}
var deckOfCards = // Array of 52 cards;
var getRandomCard = getRandomElementFromArray.bind(deckOfCards);
答案 0 :(得分:1)
我不会说这是一个合适的用途 - 应该简单地将牌组作为参数传递。
.bind
最常见的用途是专门附加给定的this
,否则无法传递和/或创建一个函数,其中初始参数是固定的,然后传递额外的参数,例如
对于前者:
function MyObject() {
this.callback = function() { ... }
}
var myobj = new MyObject();
el.addEventListener("click", myobj.callback.bind(myobj));
[没有.bind
调用,回调将无法正确引用this
对于后者:
function add(a, b) { return a + b }
var add2 = add.bind(null, 2); // no "this" needed in this case
add2(3); // returns 5
答案 1 :(得分:0)
没有。它只应在有对象时在OOP中使用,并且需要将一个方法从其prototype
传递给另一个函数。在其他情况下,它通常没有意义。
function MyClass() {
this.name = 'foo';
}
MyClass.prototype.myMethod = function() { return this.name; }
var myObj = new MyClass();
// say we need to pass myObj.myMethod somewhere else
var func = myObj.myMethod;
func(); // undefined -- doesn't work.
var func2 = myObj.myMethod.bind(myObj);
func2(); // 'foo' -- works!
答案 2 :(得分:0)
当你谈到“适当”时,你必须更加具体。我认为可以通过查看一些样式或常规来回答你的问题。我已经查找了一个解释它非常自我的人:
Javascript的一个缺点是回调函数没有绑定到正确或预期的上下文(用this变量引用)。在ES2015中,通过使用所谓的回调箭头函数解决了这个问题。
然而,虽然我们仍在编写ES5代码,但我们可以使用.bind 将正确的此上下文绑定到回调方法的方法。
例如:
this.$el = $("#some-element");
setTimeout(function () {
// Without using .bind, "this" will refer to the window object.
this.$el.hide();
}.bind(this), 1000);
这是由Plone(内容管理系统)编写的样式指南,他可以从与谷歌或其他公司不同的角度来看待这个问题。这就是为什么你必须在你的背景下决定它是否“合适”。
指向样式指南的链接:Plone Styleguide