Js的面向对象机制是基于原型(prototype)的实现,算是工业领域里唯一的一家,感到奇怪也很正常。理解this,最好先理解javascript中new的含义。
new Constructor(); 这样的语句所做的工作是:
this所指向的对象,除window外其余都是来自new语句新建的对象。而window也可以认为是页面里new出来的第一个对象,附带一个“全局的”作用域(this也在这里面,指向window)。但没人利用这个“特性“拿this访问window,只有调用构造函数忘记了new才会出现这种情况。
new Constructor(); 这样的语句所做的工作是:
- 创建一个对象,对象的类型就是Object。
- 初始化对象内部的prototype,它的类型成为Constructor。
- 执行构造函数,将构造函数作用域里的this指向这个对象。
this所指向的对象,除window外其余都是来自new语句新建的对象。而window也可以认为是页面里new出来的第一个对象,附带一个“全局的”作用域(this也在这里面,指向window)。但没人利用这个“特性“拿this访问window,只有调用构造函数忘记了new才会出现这种情况。
作者:fleuria
链接:https://www.zhihu.com/question/19636194/answer/12612763
来源:知乎
著作权归作者所有,转载请联系作者获得授权。