(1)创建一个新对象;
(2)将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
(3)执行构造函数中的代码(为这个对象添加属性和方法)
(4)返回新对象
构造函数创建对象代码如下:
function Person(name, age, job) {
this.name = name
this.age = age
this.job = job
this.sayName = function () {
alert(this.name)
}
}
var person = new Person('xiaoMing', 26, 'kaifa')
console.log('构造函数创建对象', person)
new方法的实现原理的js代码如下:
function _new() {
var o = new Object()
let [constructor, ...oArgs] = [...arguments]
o.__proto__ = constructor.prototype
这样构造函数的属性就全都给实例了
let resultObject = constructor.apply(o,oArgs)
if (resultObject && typeof resultObject == Object || typeof resultObject == "function") {
return resultObject
}
return o
}
发现一个好方法:
function _new(fn, ...arg) {
const obj = Object.create(fn.prototype);
const ret = fn.apply(obj, arg);
return ret instanceof Object ? ret : obj;
}