JavaScript原型链:prototype与__proto__
主要看了这一篇,讲解的很清晰,最主要的一点为:
若:
var Person = function () { };
var p = new Person();
则:
p.__proto__ = Person.prototype;
当调用p.xxx()
时,首先在p
中找xxx
这个属性,没有的话从p
的__proto__
(即Person
的prototype
)中寻找,如果没有,则继续向上寻找(p.__proto__.__proto__
即Person.prototype.__proto__
, ...)。
例如下面这个例子:
var Person = function() {
Person.prototype.Say = function () {
alert("Person say");
}
}
var Programmer = function() {}
Programmer.prototype = new Person();
var p = new Programmer();
我们可以得出:
p.__proto__ = Programmer.prototype
p.__proto__.__proto__ = Programmer.prototype.__proto__ = Person.prototype
所以在调用p.Say()
方法时,现在p
中寻找这个属性,如果没有就在p.__proto__
中寻找,然后一步一步往上,最后在Person.prototype
找到这个方法。