在《判断this绑定的4个规则》中我们介绍了:默认绑定、隐式绑定、显式绑定和new绑定,在面对它们的混合体的时候,我需要了解它们之间的优先级才能准确的知道,当前那条规则生效。
默认绑定毫无疑问是四条规则中最低的级别,所以我们直接看隐式绑定
和显式绑定
之间谁优先级高。
function say() {
console.log(this.name)
}
var cat_1 = {
name: '小喵1',
say: say
}
var cat_2 = {
name: '小喵2',
say: say
}
cat_1.say(); // 小喵1
cat_1.say.call(cat_2) //小喵2
从上面的结果,我们看到显式绑定比隐式绑定优先级要高。
下面我们来看下显示绑定
和new绑定
:
function resetName(name) {
this.name = name;
}
var cat_1 = {}
var cat = resetName.bind(cat_1);
cat('小喵1');
console.log(cat_1.name); //小喵1
var newCat = new cat('小喵2');
// 发现并没有改变
console.log(cat_1.name) //小喵1
// 但是
console.log(newCat.name) //小喵2
这样看起来显式绑定似乎比new绑定优先级更高,无法使用new来控制this绑定。但我们发现new cat('小喵2')
,是指向newCat这个新对象,这也符合new操作符的作用。
总结
结合判断this绑定的4个规则和了解它们之间的优先级,我们能更安全的使用this。
参考文献
《你不知道的javaScript》上卷
网友评论