美文网首页
new 创建对象发生了什么

new 创建对象发生了什么

作者: 苦苦修行 | 来源:发表于2019-12-19 14:29 被阅读0次

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

    示例代码:

    function Person(name) {
        this.name = name;
    }
    Person.hairColor = "black";
    Person.prototype.say = function() {
        console.log("My name is " + this.name);
    };
    var john = new Person("John");
    console.log(
        john.name, // "John",
        john.hairColor, // undefined
        john.height // undefined
    );
    john.say(); // "My name is John"
    console.log(
        Person.name, // "Person"
        Person.hairColor // "black"
    );
    Person.say(); // Person.say is not a function
    

    解析:

    var john = new Person("John") = {
        var obj = {};
        obj.__proto__ = Person.prototype; // 此时便建立了obj对象的原型链:
        // obj->Person.prototype->Object.prototype->null
        var result = Person.call(obj,"John"); // 相当于obj.Person("John")
        return typeof result === 'object' ? result : obj; // 如果无返回值或者返回一个非对象值,则将obj返回作为新对象
    }
    

    相关文章

      网友评论

          本文标题:new 创建对象发生了什么

          本文链接:https://www.haomeiwen.com/subject/ksexuctx.html