chdyiboke / weekly

issue and share weekly
5 stars 1 forks source link

new操作符都做了什么? #1

Open chdyiboke opened 4 years ago

chdyiboke commented 4 years ago

function A(){ } var aa = new A();

new操作符都做了什么? 里面有几条原型链?

liukexina commented 4 years ago
  1. 创建一个空对象 var obj = new Object();
  2. 继承函数的原型 obj.proto = A.prototype;
  3. 改变该空对象的this指向,即让属性和方法引入到该空对象中 var res = A.call(obj);
  4. 判断返回值res类型,若为对象或方法则返回res,否则返回obj ???? 蒙圈:call方法什么时候会返回对象或方法

原型链一条

chdyiboke commented 4 years ago
  1. 创建一个空对象obj。
  2. 设置原型链,属性和方法。obj.proto= A.prototype;
  3. this指向创建的实例。var res = A.call(obj);

如果,返回值res为对象且不为null 返回 res,则返回obj。

chdyiboke commented 4 years ago

2 条原型链:

aa.proto === A.prototype A.proto === Function.prototype

chdyiboke commented 4 years ago

蒙圈:call方法什么时候会返回对象或方法?

如果return的是非对象(数字、字符串、布尔类型等)会忽而略返回值;如果return的是对象,则返回该对象。

function A(){ return { name : 'cy'} }

返回 { name : 'cy'}