一、原型
1.定义
原型prototype
是function对象的一个属性,定义了构造函数实例化对象的公共祖先
2.实例
Car.prototype.name = 'BMW'
function Car(){
}
var car = new Car()
var car2 = new Car()
console.log(car.name)//'BMW'
console.log(car2.name)//'BMW'
3.构造器(constructor
)
可通过constructor
来查看实例后对象的构造函数
car.constructor === Car//true
Car.prototype.constructor === Car//true
4.隐式原型(__proto__
)
可通过__proto__
来查看实例对象的原型
car.__proto__.constructor === Car
new
过程隐式发生的事
function Car(){
var this = {
__proto__ : Car.prototype
}
return this
}
二、原型链
1.定义
个人理解:实例对象按照对应的原型从下到上进行查找,到最终找到相应的数据,这个过程中原型呈链式结构展现,这种链式结构称之为原型链
2.实例
Grand.prototype.lastName = 'zhang'
function Grand(){}
var grand = new Grand()
Father.prototype = grand
function Father(){
this.name = 'san'
}
var father = new Father()
Son.prototype = father
function Son(){}
var son = new Son()
console.log(son.name)//'san'
console.log(son.lastName)//'zhang'
查找son.name
,首先查看构造函数中Son
是否包含name
属性,上例中不包含;于是再往上找,通过son.__proto__
查看上一层的,存在name
属性,son.name === "san"
,若没找到,再通过son.__proto__.__proto__
进行查找;son.lastName
同理
三、总结
- 只有函数才可以使用
prototype
属性 - 只有实例化的对象才可以使用
__proto__
属性 - 实例对象的构造器为构造函数本身