new的执行流程
1 | function foo() { |
new的执行流程
- 绑定this为空对象
- 让空对象
[[Prototype]](__protot__)
–> 函数的prototype
属性
(1) 所有对象都有[[Prototype]](隐式属性 __protot__)
-> 所有对象本质上都是new出来的
(2) 所有的函数对象 -> prototype - 正常执行函数
- 如果函数返回的基本类型,返回this的值,否则返回原函数的返回值
[[GET]]
1 | function foo() { |
[[GET]]流程
- 判断对象里面有没有
- 判断它的__proto__指向的对象里面有没有
面试题
1 | Object.prototype.a = function () { |
原型链的终点是:Object.prototype.[[prototype]] = null
- Object.prototype.
__proto__
= null; // 不是所有对象都是Object的实例 - Function.prototype._
_proto__
= Object.prototype; // new Object() - Object.
__proto__
= Function.prototype; // new Funtion() - Function.
__proto__
= Function.prototype