前言
new 操作符就是返回一个对象,可内部到底是怎样的?
一、new一下就有对象
- 创建出新的对象,如obj.
- 把obj的__proto__指向构造函数的prototype对象 实现继承.
- 将this指向步骤1创建的对象obj.
- 返回创建的对象obj(如果该函数没有返回对象,则返回this)
二、自己来个new
这里只是模仿new构造函数得到一个对象.
目的是为了让大家更好的了解new的实现过程.
当然你不知道,并不影响写代码,只影响谈工资而已!
function _new(...args) {
const [constructor, ...otherArgs] = args;
// 判断构造函数是否为function
if (typeof constructor !== 'function') {
throw new TypeError('constructor is not a function');
};
// 1.创建空对象
const obj = {};
// 2. 设置obj的原型对象为constructor的原型对象
Object.setPrototypeOf(obj, constructor.prototype)
// 3.将constructor中的this,指向obj,就第一步创建的空对象
constructor.apply(obj, otherArgs);
// 4 返回对象
return obj;
}
function Test(x, y) {
this.x = x;
this.y = y;
}
var testObj = _new(Test, 1, 2);
console.log(testObj);
别跑,据说给我一键三联的人写代码都没Bug!
我是飞翔,
愿您日有所长!