Javascript中的Function.prototype.bind

时间:2015-06-25 03:27:35

标签: javascript

我有这样的功能:

function foo(){

}

我可以打电话:

foo().bind(self);

为什么Javascript让我这样做而没有运行时错误?

我认为唯一有效的语法是:

 var func = foo.bind(self);
 func();

以简写形式表示:

foo.bind(self)();

更进一步,我认为这样的事情是可能的:

function foo(){

}.bind(self);

但最后一个似乎不起作用

1 个答案:

答案 0 :(得分:0)

编译时允许

foo().bind(self);但如果foo()没有返回函数对象,则可能抛出。喜欢这个

function bar() {
}

function foo(){
    return bar;
}

因此bind实际执行bar;

最后一个是函数声明,所以你不能使用点表示法。为了实现这一点,您需要将其转换为表达式。最简单的方法是添加大括号

(function foo(){

}.bind(self));

然而,这是无用的,因为您无法存储结果。如果将其分配给func,则函数声明将成为表达式。以下至少是有道理的:

var func;
func = function foo(){

}.bind(self);