首页 > 试题广场 >

 new操作符做了什么?

[问答题]
function create(){
    // 1. 创建空对象
    let obj = new Object();
    // 2. 链接原型
    let con = [].shift.call(arguments) 
    obj.__proto__ = con.prototype
    // 3. 绑定this
    let res = con.apply(obj,arguments)
    // 4. 返回新对象
    return typeof res === 'object'?res:obj;
}

发表于 2020-02-15 16:55:31 回复(1)
function Fun(){
    this.x=1
}
let x=new Fun()
1. new首先会生成一个空的对象
2. 然后构造函数里面的this会指向这个空对象
3. 构造函数内的 this.x=1 就相当于将 1 赋值给了这个空对象
4. 其实还默认做了一个事  即 return this
5. 所以最后 x 得到了 return 回来的 this。
6. 所以 x 有了 构造函数的属性
发表于 2020-03-03 10:12:09 回复(0)
var func = function(){}
var newO = new func()
new一共经历了四个阶段
1.创建了空对象
var newO = new Object()
2.设置圆形脸
newO,__proto__ = func.prototype
3.将func中的this指向newO
var result = func.call(newO)

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

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


发表于 2020-02-13 22:05:08 回复(0)
来自《JS》高级程序设计ch6.2 创建对象
function Person(name,age){
    this.name = name;
    this.age = age;
}

var person1 = new Person("sun",19);

要创建Person的新实例,必须使用new操作符,以这种方式调用构造函数会经历以下4个步骤

  1. 创建一个新对象

  2. 将构造函数的作用域赋给新对象(因此this就指向了这个对象)

  3. 执行构造函数中的代码(为这个新对象添加属性)

  4. 返回新对象



发表于 2020-11-04 15:23:49 回复(0)
红宝书上的解释如下
function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.sayName = function() {
        console.log(this.name);
    };
}

var person = new Person('cregskin', 20, 'engineer' );
1. 创建一个新对象
2. 将构造函数的作用域赋给新对象(因此this指向了这个新对象)
3. 执行构造函数中的代码(此处添加属性和方法)
4. 返回新对象
发表于 2020-05-11 16:02:06 回复(0)
1.创建空对象;
2.设置原型链;
3.绑定this;
4.返回新对象。
发表于 2021-02-24 14:32:44 回复(0)
先在new构造出来的实例对象上隐式声明var this={ __proto__=构造函数的prototype},然后将构造函数的参数依次作为this对象的属性,最终返回this对象,若在new操作符内显式返回值时,当值为普通数据类型时,显式返回的值会被忽略,依然返回隐式声明的this对象,若显式返回值是引用数据类型时,new操作符将返回该引用数据类型,不再返回隐式的this对象。
发表于 2020-10-06 22:55:46 回复(0)
new 操作符执行以下步骤:
1.创建一个对象
2.将当前实例绑定到构造函数上(绑定this)
3.执行构造函数代码
4.返回新对象
发表于 2020-05-05 15:24:31 回复(0)
创建一个新对象。
将构造函数的作用域赋给新对象(this指向新对象)。
执行构造函数中的代码。
返回新对象。
发表于 2020-02-20 20:00:55 回复(0)