new操作符具体干了什么呢

2021-03-02 14:32发布

6条回答

1.创建一个空对象

let obj = new Object();

2.链接到原型

把 obj 的proto 指向构造函数Func的原型对象 prototype,此时便建立了 obj 对象的原型链:
obj->Func.prototype->Object.prototype->null
代码为:

obj.__proto__ = Func.prototype;

3.绑定this值(让Func中的this指向obj,并执行Func的函数体。)

let result = Func.call(obj);

4.返回新对象
(判断Func的返回值类型:
如果无返回值 或者 返回一个非对象值,则将 obj 作为新对象返回;否则会将 result 作为新对象返回。)

1.创建一个空对象: 并且this变量引入该对象,同时还继承了函数的原型。

2.属性和方法被加入到 this 引用的对象中。

3.新创建的对象由 this 所引用,并且最后隐式的返回 this 。

Javascript的new关键字主要的作用是继承

new一共经历4个阶段

1、创建一个空对象

var obj = new Object();

2、设置原型链

此时便建立了obj对象的原型链

obj._proto_ = Object.prototype;

3、让Func的this指向obj,并执行Func函数体

Object.call(obj);

4、判断Func的返回值类型

如果是值类型,返回obj;
如果是引用类型,返回这个引用类型的对象。

return typeof result === 'obj'? result : obj;


梵梵
4楼 · 2021-03-04 09:46

当一个构造函数前加上new的时候,背地里来做了四件事:
1.生成一个空的对象并将其作为 this;
2.将空对象的 proto 指向构造函数的 prototype;
3.运行该构造函数;
4.如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。




灰机带翅膀
5楼 · 2021-03-05 11:15

new操作符具体干了什么呢?

(1)建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

(2)属性和方法被加入到 this 引用的对象中。

(3)新创建的对象由 this 所引用,并且最后隐式的返回 this 。


寂静的枫林
6楼 · 2021-03-05 16:57

当一个构造函数前加上new的时候,背地里来做了四件事:
1.生成一个空的对象并将其作为 this;
2.将空对象的 proto 指向构造函数的 prototype;
3.运行该构造函数;
4.如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。

人情世故
7楼 · 2021-03-08 15:54

1、创建一个空对象


varobj=new Object();

2、设置原型链


obj.__proto__= Func.prototype;

3、让Func中的this指向obj,并执行Func的函数体。


var result =Func.call(obj);

4、判断Func的返回值类型:


如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。


if (typeof(result) == "object"){

  func=result;

}

else{

    func=obj;;

}