js new运算符到底干了什么?
在JavaScript中,想要创建一个对象,往往用到new,但是new到底做了什么呢,今天我们来讨论一下
new运算符:创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例
在MDN中描述:
- 创建一个空的简单的JavaScript对象(即{})
- 链接该对象(设置该对象的constructor)到另一个对象
- 将步骤1新创建的对象作为this的上下文
- 如果该函数没有返回对象,则返回this
这里有 对象objA:是一个空的JavaScript对象,对象objB:使我们自己定义的函数
我们自己定义的函数
function objB(name){
this.name = name
}
第一点代码实现:
var objA = {}
第二点代码实现
objA.__proto__= objB.prototype
第三点代码实现
//arguments 转为数组
var args = [].slice.call(arguments);
//去除构造函数
args.shift()
var result = objB.apply(objA, args)
第四点代码实现
if(Object.prototype.toString.call(result) === "[Object Object]"){
return result
}else {
return objA
}
合起来的代码
var New = function(objB) {
var objA = {}
objA.__proto__= objB.prototype
//arguments 转为数组
var args = [].slice.call(arguments);
//去除构造函数
args.shift()
var result = objB.apply(objA, args)
if(Object.prototype.toString.call(result) === "[Object Object]"){
return result
}else {
return objA
}
}
总结: new 给返回的实例一个this上下文,和一个构造函数。