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);
相关文章
相关标签/搜索