文章目录
参考:
1.https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/new
2.https://www.cnblogs.com/lvmylife/p/8184176.html
3.https://www.cnblogs.com/goloving/p/9297019.html
new运算符创建的四个过程
new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。obj=new ClassA(…),new 关键字会进行如下的操作:
- 创建一个空的简单JavaScript对象(即{});
var obj = {}; - 链接该对象(即设置该对象的构造函数ClassA)到另一个对象 ;
obj.__proto__ = ClassA.prototype; - 将步骤1新创建的对象作为this的上下文 ,this被指向新实例对象:
ClassA.call(obj); //{}.构造函数() - 如果该函数没有返回对象,则返回this。
var Person = function(name){
this.name = name;
}
Person.prototype.sayHello = function() {
console.log('hello ' + this.name);
}
var p1 = new Person('HANMEI');
p1.sayHello();
原生js实现
function New(F){
var obj = {'__proto__': F.prototype}; /*第一步:创建空对象,第二步:连接该对象到构造函数*/
return function() {
F.apply(obj, arguments); /*第三步:将this指向新建的对象,继承父类属性*/
return obj; /*第四步:返回该对象*/
}
}
则
var p1 = new Person('HANMEI');
//等同于
var p1 = New(Person)('HANMEI');