1.prototype的介绍
每个函数都有一个prototype属性,默认指向一个Object空对象(原型对象)
原型对象中有一个constructor,指向函数对象
下面是一个例子:
function People(name,age){
this.name = name;
this.age = age;
}
如果要添加一个新的属性需要在构造函数里面添加,比如要添加一个sex属性
function People(name,age){
this.name = name;
this.age = age;
this.sex = '男';
}
而不能直接在对象构造器中添加,比如Person.sex = ‘男’
2.prototype继承
所有JS对象都会从prototype中继承属性和方法
function People(name,age){ //在对象的构造函数中添加属性和方法
this.name = name;
this.age = age;
this.sex = '男';
this.meal = function(){
console.log('酸菜鱼')
}
}
People.prototype.sleep = function(){ //使用prototype属性给对象添加新的方法
console.log('睡觉中...')
}
var people = new People('Tom', 18)
people.meal() //打印输出酸菜鱼
people.sleep() //打印输出睡觉中...
在这个例子中,people是一个实例对象,它可以调用父类的方法。
JS对象有一个指向原型对象的链,当访问一个对象的属性时,它会先从对象本身寻找这个属性,找不到,会依次向上寻找该对象的原型,以及原型的原型,层层向上搜索,直到找到一个对象的属性或到达原型链的尾部。