[这与Bound function instead of closure to inject extra arguments有关,但既没有明确要求也没有回答。]
我正在调用一个函数,它希望函数作为参数。我想从我的类传递一个方法,绑定到我的类的一个实例。为清楚起见,假设我的课程如下:
var MyClass = function() {}
MyClass.prototype.myMethod = function() { ... }
var my_instance = new MyClass();
使用bind
:
doSomething(my_instance.myMethod.bind(my_instance))
并将调用包装在匿名函数中:
doSomething(function() { my_instance.myMethod(); })
答案 0 :(得分:1)
如果您班级中的原型需要生成回调,则可能不知道其实例的名称。因此,您需要使用this
,但this
的值取决于回调的执行位置。
考虑以下示例:
var MyClass = function (x) { this.something = x; };
MyClass.prototype.makeCall = function () {
var myBadCallback = function() { console.log(this.something); };
var myGoodCallback = function() { console.log(this.something); }.bind(this);
// When called, the value of "this" points to... we don't know
callMeBack( myBadCallback );
// When called, the value of "this" points to this instance
callMeBack( myGoodCallback );
};
function callMeBack( callback ) { callback(); };
var foo = new MyClass('Hello World!');
var bar = new MyClass('Goodbye!');
// Probably prints "undefined", then prints "Hello World!"
foo.makeCall();
// Probably prints "undefined", then prints "Goodbye!"
bar.makeCall();
在上面的示例中,第一个输出可能会打印undefined
,因为上下文(this
引用的内容)在回调执行时已更改。
这个例子可能看似人为,但出现了做这种情况,常见的情况是AJAX回调。