手写模拟new的函数

 

 

function objectFactory(...args) {
    //创建实例对象
    let obj = {}
    //构造函数取第一个参数
    let constructor = args.shift()
    //实例对象的__proto__属性与构造函数的prototype相同
    obj.__proto__ = constructor.prototype
    //将构造函数的this指向实例对象,如果有返回结果,保存
    let ret = constructor.apply(obj, args)
    //返回结果(如果有的话)或者实例对象obj
    return typeof ret === 'object' ? ret : obj
}

function Person(name) {
    this.name = name
}

let p = objectFactory(Person, 'xiaoming')

 

posted @ 2021-02-19 14:31  懒懒同学不懒  阅读(33)  评论(0编辑  收藏  举报