原型和原型链
原型:
prototype:
每一个函数都有一个prototype属性,称之为显示原型。
__proto__:
每个实例对象都有一个__proto__,称为隐式原型。这个对象的__proto__指向构造函数的显示原型。
举例:
//创建一个构造函数,表示一个类
function Person(name,age){
this.name=name;
this.age=age;
}
Person.prototype.color="yellow";
//实例对象
let one=new Person('张三',18);
let two=new Person('李四',20);
console.log(one,two)
console.log(one.__proto__==Person.prototype) //true
constructor :
每个显示原型prototype都有constructor属性,constructor指向构造函数本身。
console.log(Person.prototype.constructor==Person) //true
原型链:
当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造函数的prototype的__proto__中查找,这样一层一层向上查找就会形成一个链式结构,我们称为原型链
举例:
function Parent(month){
this.month = month;
}
var child = new Parent('Ann');
console.log(child.month); // Ann
console.log(child.father); // undefined
在child中查找某个属性时,会执行下面步骤
:
访问链路
为:
1,一直往上层查找,直到到null还没有找到,则返回undefined
2,Object.prototype.__proto__ === null
3,所有从原型或更高级原型中的得到、执行的方法,其中的this在执行时,指向当前这个触发事件执行的对象