构造函数的基本使用
function Person(name, age) {
this.name = name;
this.age = age
// return {}
// return []
// return function () {}
// return undefined
return null
}
Person.prototype.say = function () {
console.log('说话了')
}
let p = new Person('zsy', 21)
/**
* 1.返回对象:输出该对象
* 2.返回数组:输出该数组
* 3.返回函数: 输出该函数
* 4.返回undefined:还是输出实例对象 p,也就是跟没有return一样
* 5.返回null:还是输出实例对象 p,也就是跟没有return一样
*/
console.log(p)
p.say()
手写实现

function mockNew() {
// 拿到Constructor的第一个参数,即构造函数Person
let Constructor = [].shift.call(arguments)
// 不要用Object.create(null)创建对象,因为创建出来的对象是没有任何属性的,也没有__proto__等属性
let obj = {}
obj.__proto__ = Constructor.prototype;
// r 为构造函数Person的返回值
let r = Constructor.apply(obj, arguments)
// 如果返回的是复杂数据类型(如对象,数组,函数),那么使用返回的结果作为实例对象
return r instanceof Object ? r : obj
}
function Person(name, age) {
this.name = name
this.age = age
return {}
}
let p = mockNew(Person, 'zsy', 21)
console.log(p)
版权声明:本文为weixin_50238437原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。