Javascript中的Function.prototype.bind
我有这样一个函数:Javascript中的Function.prototype.bind,javascript,Javascript,我有这样一个函数: function foo(){ } 我可以打这个电话: foo().bind(self); 为什么Javascript允许我在没有运行时错误的情况下执行此操作 我认为唯一有效的语法是: var func = foo.bind(self); func(); 简而言之,就是: foo.bind(self)(); 此外,我认为这样的事情是可能的: function foo(){ }.bind(self); 但最后一个似乎不起作用foo().bind(self),但
function foo(){
}
我可以打这个电话:
foo().bind(self);
为什么Javascript允许我在没有运行时错误的情况下执行此操作
我认为唯一有效的语法是:
var func = foo.bind(self);
func();
简而言之,就是:
foo.bind(self)();
此外,我认为这样的事情是可能的:
function foo(){
}.bind(self);
但最后一个似乎不起作用foo().bind(self)编译时允许使用code>,但如果foo()
未返回函数对象,则可能会抛出。像这样
function bar() {
}
function foo(){
return bar;
}
因此,bind
实际上将为bar
执行
最后一个是函数声明,所以不能使用点表示法。要使之成为可能,您需要将其转换为表达式。最简单的方法是添加大括号
(function foo(){
}.bind(self));
但是,这是无用的,因为您无法存储结果。如果将其指定给func
,则函数声明将成为表达式。以下几点至少是有意义的:
var func;
func = function foo(){
}.bind(self);
foo().bind(self)只有当foo
返回另一个函数时,code>才会起作用,例如function foo(){…return function(){};}
如果将函数声明包装在parens中,最后一个函数才会起作用<代码>(函数foo(){}).bind(self)
这个foo.bind(self)(
“速记”也有点傻,因为你可以直接foo.call(self)
。如果您立即调用它,则无需创建新函数。“没有运行时错误”嗯,我得到TypeError:foo(…)未定义<代码>函数foo(){}.bind(self)仅当函数定义被解释为函数表达式时,代码>才起作用。我还得到了运行时错误。您的示例可能缺少某些内容,或者您的浏览器有缺陷。您运行的浏览器/解释器是什么?