哪个更好
some_func.bind(this,arg1,arg2,arg3).delay(4);
或
some_func.bind(this).delay(4,arg1,arg2,arg3);
我知道两种方式都会将内容分成两层,但假设其中一个参数可以说arg1
是一个对象,它是当前上下文的引用,例如: var arg1 = this.some_obj
。现在因为传递值的所有业务,通过引用传递,并且函数范围将第二种方式无法恢复arg1
,因为当调用delay
时,其上下文是全局对象。
答案 0 :(得分:2)
测试很简单,两种方式都很好。
function object() {
this.foo = function(arg) {
document.write(this.bar+' was born on '+arg);
}
this.bar = 'Bob';
this.dob = new Date();
foo.bind(this, this.dob).delay(4);
this.dob.setFullYear(1971);
}
object(); // start the delay
出生日期是一个对象,因此通过引用传递。您可以看到这种情况发生,因为年份是在通话后设置的,延迟写入显示过去的日期。
现在将重要的一行更改为foo.bind(this).delay(4, this.dob)
,它仍然有效!
这是一个非常难的问题。为什么foo.delay.call(this, 4, this.dob)
不起作用?