new一個對象的過程


不用死記硬背,理解才是硬道理。只需要寫個例子,然后輸出看一下就清楚了

首先我們看下new Person輸出什么?

    var Person = function(name, age) {
        this.name = name;
        this.age = age;
    };
    Person.prototype.show = function() {
        console.log(this.name, this.age);
    };
    var p = new Person("bella", 10);
    console.log(p);

 

有屬性name, age 和 __proto__

__proto__里面有原型方法show,constructor, __proto__

然后我們再輸出構造器Person.prototype:

對比一下,發現p的__proto__的值就是構造函數Person的prototype的屬性值。

因此new操作符創建對象可以分為以下四個步驟:

  • 創建一個空對象
  • 將所創建對象的__proto__屬性值設為構造函數的prototype的屬性值
  • 執行構造函數中的代碼,構造函數中的this指向該對象
  • 返回對象

因此上面的過程就可以等同於下面的過程:

    var Person = function(name, age) {
        this.name = name;
        this.age = age;
    };
    Person.prototype.show = function() {
        console.log(this.name, this.age);
    };
    var p = {};
    p.__proto__ = Person.prototype;
    Person.call(p, "balle", 10);
    // var p = new Person("bella", 10);
    console.log(p);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM