new()到底做了什么
MDN关于new是这么说的——new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例
-
上代码,new()的简单实例应用
function Animal (name, age){ this.name = name; this.age = age; } Animal.prototype.id = '1' let cat = new Animal('cat',1); console.log(cat.name); // 'cat' console.log(cat.id) //1
-
new的实际应用很简单,这里探究一下new操作符实际上干了什么
说人话也就是
- 创建一个空的简单JavaScript对象(即{})
- 链接该对象(即设置该对象的构造函数)到另一个对象(son.__proto __ = father.prototype)
- 将创建的空对象作为this的上下文
- 如果该函数没有返回对象,则返回this
-
自己来写一个_new函数~
function _New(){ // 创建空对象 const obj = {}; // 截取到constructor参数 Constructor = Array.prototype.shift.call(arguments); // 链接到该对象(obj) obj.__proto__ = Constructor.prototype; // 使用apply,改变构造函数的this指向,使其指向新对象 let result = Constructor.apply(obj, arguments) // 判断类型,返回对象 return result instanceof Object ? result : obj }