构造函数的实例
首先了创建一个构造函数,这个构造函数包含一个原型属性是say
function A(name) {
this.name = name
}
A.prototype.say = function() {
console.log('haha')
}
创建一个A的实例并且打印
let a = new A()
console.log(a)
console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(a.__proto__ == A.prototype) // true
image.png
可以看到此时的a是一个object,a的隐式原型指向A的显示原型,根据以上,可以大概推导出new的过程
_new
function _new(...func) {
let _obj = {} // 创建一个空对象,这个对象将会是返回值
let [o, ...args] = func // 保存一下构造函数和传入的参数
o.apply(_obj, [...args]) // 继承属性
_obj.__proto__ = func.prototype // 原型赋值给隐式原型
return _obj
}
let a = _new(A, 'tom')
console.log(a)
console.log(Object.prototype.toString.call(a)) // [object Object]
console.log(a.__proto__ == A.prototype) // true
a.say()
结果相同
image.png