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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,009评论 19 139
  • this关键字是JavaScript中最复杂的机制之一,因为this既不指向函数自身也不指向函数的作用域,而是取决...
    悟C阅读 422评论 0 0
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 6,937评论 15 54
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,600评论 1 92
  • 干净美好的事物总是让人向往。坐窗台,读一本书,喝一杯咖啡,听一首悠扬的歌。偶有清风拂过脸颊,岂不美哉。 线稿...
    糖宝宝803阅读 192评论 0 7