原型是 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 中的一些方法,这使得我们的实例对象功能更强大。