JavaScript new 的时候到底发生了什么?
function Person(name) {
this.name = name;
}
let liLei = new Person('lilei');
console.log(liLiei.name) // lelei;
刚开始学习js的时候我们很难明白new的时候发生了什么,那么我用代码的形式说一下我自己的理解,如果有错误欢迎指出:
// 假设我们有一个New函数fn为构造函数eg: Person
function New(fn) {
let res = {}; //第一步生成一个空对象
if(fn.prototype !== null) {
res.__proto__ = fn.prototype; //将生成的对象的原型指向构造函数的prototype属性
}
let retu = fn.apply(res,Array.prototype.slice.call(arguments, 1)); //将构造函数的作用域赋给新的对象,执行构造函数里面的代码为新对象添加属性
if((typeof retu === 'object' || typeof retu === 'function') && type retu !== null) return retu; //如果构造函数有返回值则返回该结果
return res; // 没有返回值则返回新创建的对象也就是我们说的实例
}
new的时候大概就是发生了以上几点变化,如果你能理解这个New函数里面的意思,那么就可以轻而易举的记住喽