续《判断this绑定的4个规则》之优先级

在《判断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》上卷

你可能感兴趣的:(续《判断this绑定的4个规则》之优先级)