定义
prototype:每个函数(function)对象中都有一个特殊的属性,叫做prototype,该属性指的对象为原型对象。
原型对象(prototype)相当于一个公共的区域可以被所有的该类实例访问,我们可以将一些实例共有的属性或方法存储在原型对象中,这样只需要设置一次即可以让所有的对象都访问到该方法或者属性。
_ proto :每个对象都有一个__proto_(隐式原型)属性。
constructor:是构造函数显示原型的一个属性,指向这个原型对象对应的构造函数。
function Tree(name) {
this.name = name
}
const theTree = new Tree('Redwood')
console.log('theTree.constructor is ' + theTree.constructor)
//打印结果
theTree.constructor is function Tree(name) {
this.name = name
}
实例的隐式原型指向其构造函数的显示原型
<script type="text/javascript">
window.onload = function(){
function Computer(name,brand,price,color){
this.name = name;
this.brand = brand;
this.price = price;
this.color = color;
}
Computer.prototype.play = function(){//每个函数都有一个prototype属性该属性指的对象为原型对象
console.log('玩游戏');
}
var t1 = new Computer('macBook','apple','18000','银色');//t1是构造函数Computer的实例
console.log(t1);
}
</script>
如图,Computer是一个构造函数,他拥有一个叫prototype的属性,它指向的原型对象为0x200,它的原型对象拥constructor构造器,constructor又指向原型对象对应的构造函数computer,所有的原型对象都是由object对象创建,computer构造函数创建了一个实例化对象0x300,实例对象拥有一个隐式原型,
隐式原型会先在自身寻找0x300,如果找不到就去上一级的原型中寻找0x200,如果再找不到,就去0x200的上一级的原型中寻找,直到找到object的原型,如果依然没有,则返回undefined。这就是原型链。
Function函数创建了所有函数,computer object ,也可以看作他new了自己,他也拥有phototype属性,这个属性指向他的原型对象,他的原型对象0x700也拥有constructor构造器,他又指向原型对象对应的构造器0x600。
object构造函数new了所有的原型对象,是所有构造函数显示原型的实例