知识卡片

调用决定this

普通读书笔记卡 · 1492.a

内容

this 由调用模式决定,非定义位置:方法调用绑定到所属对象,函数调用绑定到全局对象(语言设计缺陷,常用 var that = this 规避),构造器调用绑定到新对象,apply 调用可显式指定 this。绑定在调用时才发生(”超级”延迟绑定),使同一函数可被不同对象复用。发散:this 问题本质是调用协议问题,不是作用域问题。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第4章《函数 Functions》"调用"一节 - 结论依据:原文列出方法调用、函数调用、构造器调用、apply 调用四种模式对 this 的不同绑定方式,并指出"this到对象的绑定发生在调用的时候",据此推出 this 取决于调用方式而非定义位置。 - 原始内容:参数this在面向对象编程中非常重要,它的值取决于调用的模式。在JavaScript中一共有4种调用模式:方法调用模式、函数调用模式、构造器调用模式和apply调用模式……this到对象的绑定发生在调用的时候。这个"超级"延迟绑定(very late binding)使得函数可以对this高度复用。