不用死記硬背,理解纔是硬道理。只須要寫個例子,而後輸出看一下就清楚了函數
首先咱們看下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
所以上面的過程就能夠等同於下面的過程:原型
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);