1.原型prototype
每个函数都有一个prototype属性,也只有函数才拥有该属性。该属性指向的是原型对象,这个属性也是一个对象数据类型的值。
function f(){}
f.prototype.name = 'shawn';
var f1 = new f();
var f2 = new f();
console.log(f1.name) // shawn
console.log(f2.name) // shawn
函数的prototype属性指向了一个对象,这个对象正是调用该构造函数而创建的实例的原型,也就是上面提到的f1和f2的原型。
2. poroto
每一个JavaScript的对象都具有的一个属性叫proto,这个属性会指向该对象的原型。
function f(){}
var f1 = new f();
f1.__proto === f.prototype // true
3.原型链
在JavaScript中万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。
这里需要强调的是Object.prototype 的原型是null。因为Object是js中所有对象数据类型的基类。