探索new 实例化对象时帮我们做了哪些工作

2018-08-27  本文已影响0人  zackxizi

1. 先看一个列子

    Person = function (age=12) {
        this.age = age
    }
    // 打印出来的值为undefined
    console.log(Person.age);

    // 但是通过new 运算符 就可以获取age值了
    // 此时被实例化的ming = Person {age: 12}
    ming = new Person(27)

    // 这里就能获取到age=27了
    console.log(ming.age)

那么为什么通过new之后就能通过键值对的形式获取age值呢

2. new 为我们创建实例做了哪些工作

    new Person(27) = {
        var obj = {}
        obj.__proto__ = Person.prototype // 此时便建立了obj对象的原型链
        var result = Person.call(obj, 27) // 通过call将Person的属性都复制到result
        return typeof result === 'object' ? result : obj // 如果无返回值或者返回一个非对象值,则将obj返回作为新对象
    }

参考:new创建对象的过程发生了什么

上一篇下一篇

猜你喜欢

热点阅读