绑定与延迟相结合

时间:2010-11-08 00:43:58

标签: javascript prototypejs

哪个更好

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时,其上下文是全局对象。

1 个答案:

答案 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)不起作用?