new一個對象的過程

不用死記硬背,理解纔是硬道理。只須要寫個例子,而後輸出看一下就清楚了函數

首先咱們看下new Person輸出什麼?this

    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__spa

__proto__裏面有原型方法show,constructor, __proto__prototype

而後咱們再輸出構造器Person.prototype:code

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

所以new操做符建立對象能夠分爲如下四個步驟:blog

  • 建立一個空對象
  • 將所建立對象的__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);
相關文章
相關標籤/搜索