欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-04 19:44:10
...

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创建对象的过程发生了什么