被忽略的this和更安全的this用法
被忽略的this
如果你把 null 或者 undefined 作为 this 的绑定对象传入 call ,apply 或者 bind ,这些值在调用的时候会被忽略,实际应用的是默认绑定规则:
一种非常常见的做法是使用 apply(..)来“展开”一个数组,并当作参数传入一个参数,类似的,bind(..)可以对参数进行柯里化。
总是使用 null 来忽略 this 绑定可能会产生一些副作用。默认绑定会把this绑定到全局对象,如果某个函数确实使用了this,这将导致不可预计的后果(比如修改全局对象)。
更安全的this
一种"更安全"的做法是传入一个特殊的对象,把this绑定到这个对象不会对你的程序产生任何副作用,就像网络一样,我们可以创建一个"DMZ"(非军事区)对象--它就是一个空的非委托的对象。
如果我们在忽略this绑定的时总是传入一个DMZ对象,那就什么都不用担心了,因为任何对于this的使用都会被限制在这个空对象中,不会对全局对象产生任何影响。
间接引用
你可能创建一个函数的“间接引用”,在这种情况下,调用这个函数会应用默认绑定规则。
赋值表达式 p.foo = o.foo
的返回值是目标函数的引用,因此调用位置是 foo()。
注意: 对于默认绑定,决定this绑定对象的并不是调用位置是否处于严格模式,而是函数体是否处于严格模式。如果函数体处于严格模式,this会被绑定到undefined,否则this会被绑定到全局对象。
Last updated
Was this helpful?