一、前言
在构造函数中,通常使用 new 操作符进行实例化,那么 new 操作符到底有什么作用,可以使用其他方案代替吗?
二、new 操作符做了什么事情
function Person(name){
this.name = name ;
};
var jack = new Person('jack');
var jack1 = new Person('jack');
console.log(jack);//{name:jack};
console.log(jack1);//{name:jack};
console.log(jack == jack1);//false;
通常当创建完构造函数之后,可以直接通过 new 创建实例,并且每个实例都不一样。
接下来看另一个函数。
function Person(name,age){
this.name = name ;
this.age = age ;
}
function copyNew(sub,...arg){
//1.创建新对象
var obj = {};
//2.将空对象作为 this 调用父函数
sub.apply(obj,arg);
//3.将改对象原型指向父函数,实现继承
obj.__proto__ = sub.prototype;
//4.返回该对象
return obj;
};
var jack = copyNew(Person,'jack',12);
console.log(jack);//{name:jack,age:12};
以上函数基本上实现了 new 操作符的功效,主要分为以下四步。
1.新建一个空对象 obj ;
2.将 obj 作为 this 通过 apply 方法调用 sub 函数;
3.将 obj 的原型指向 sub 函数;
4.返回 obj 对象。