JS笔记第二记:new干了啥,怎么实现new操作

192 阅读1分钟

js的继承总是看不懂,知道new操作之后终于能理解点了 参考来源:juejin.cn/post/684490… www.jianshu.com/p/66f3aef3e… github.com/mqyqingfeng…

1,为什么需要new

在学c++的时候,我们知道new是为了省代码来批量生产对象,学了点js之后,知道new不只是可以省代码,还可以省内存。

// 构造函数
function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"];

}
// 原型
Person.prototype = {
    sayName: function() {
        return this.name;
    }
}
// 批量生产person(省代码), 实例的方法指向构造函数的原型的方法,都是一样的(省空间)
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor");

2,new干了啥

拿person1举例

  1. 创建(或者说构造)一个全新的对象。
person1 = {}
  1. 这个新对象会被执行 [[ 原型 ]] 连接。
person1.__proto__ = Person.prototype
  1. 这个新对象会绑定到函数调用的 this。
Constructor.apply(person1, arguments);
  1. 如果函数没有返回其他对象,那么 new 表达式中的函数调用会自动返回这个新对象
return person1

3, 怎么实现一个new操作

function objectFactory() {

    var obj = new Object(),

    Constructor = [].shift.call(arguments);

    obj.__proto__ = Constructor.prototype;

    var ret = Constructor.apply(obj, arguments);

    return typeof ret === 'object' ? ret : obj;

};

因为可能构造函数里面有返回值(返回个对象)