原型是 JS 中比較抽象的一個部分,下面通過盡可能多的圖來解釋這一點。
-
首先明確一點,JS 中所有的函數 fn 都有 prototype 屬性(顯式原型),fn.prototype 指向該函數的原型。
-
另外,所有對象 obj 都有 [[prototype]] 屬性(隱式屬性),很多瀏覽器將其命名為 proto ,obj.proto 它指向構造函數中的 prototype 屬性。
var obj = {
'name': 'hunter'
};
console.log(obj.__proto__);//指向 Object.prototype
function F(name){
this.name = name;
}
F.prototype.sayName = function(){
console.log(this.name);
};
var f1 = new F('Hunter');
f1.sayName();//通過原型鏈 f1.__proto__ 找到 F.prototype 對象中的 sayName 屬性
console.log(f1.__proto__);//指向 F.prototype
所以,通過圖可以知道,構造函數 F 新建的實例可以通過原型鏈來繼承Object.prototype 中的一些方法,這使得我們的實例對象功能更強大。