obj.apply(null)
如果你把null或者undefined作为this的绑定对象传入call、apply或者bind,这些值 在调用时会被忽略,实际应用的是默认绑定规则:

那么什么情况下你会传入null呢? 一种非常常见的做法是使用apply(…)来“展开”一个数组,并当作参数传入一个函数。类 似地,bind(…)可以对参数进行柯里化(预先设置一些参数),这种方法有时非常有用:

总是使用null来忽略this绑定可能产生一些副作用。如果某个函数确实使用了 this(比如第三方库中的一个函数),那默认绑定规则会把this绑定到全局对象(在浏
览器中这个对象是window),这将导致不可预计的后果(比如修改全局对象)。 显而易见,这种方式可能会导致许多难以分析和追踪的bug。
更安全的this
Object.create(null)和{}很像, 但是并不会创建Object.prototype这个委托,所以它比{}“更空”:

使用变量名ø不仅让函数变得更加“安全”,而且可以提高代码的可读性,因为ø表示“我希望this是空”,这比null的含义更清楚。可以用任何喜欢的名字来命名 DMZ(demilitarized zone,非军事区)对象。
本文探讨了在JavaScript中使用apply和bind时,如何通过传递null或使用Object.create(null)来避免this绑定到全局对象的问题,从而增强代码的安全性和可读性。
60

被折叠的 条评论
为什么被折叠?



