js文件
// extend:继承、扩展
//类People
// 数据属性 name,age,sex,weight
// 方法属性
// study:学习时体重下降0.1
// sleep:睡觉时体重上升0.1
// introduce:我是xxx今年xx岁了
function People(name,age,sex,weight){
this.name=name;
this.age=age;
this.sex=sex;
this.weight=weight;
}
People.prototype.study=function(){
this.weight-=0.1
}
People.prototype.sleep=function(){
this.weight+=0.1
}
People.prototype.introduce=function(){
console.log(`我是${this.name},今年${this.age}了`);
}
var peo=new People("张三",23,true,120)
peo.study()
peo.introduce()
console.log(peo);
// 类与类可以形成父子关系:父类、子类
// 继承:子类可以拥有父类的属性,子类还可以拥有自己特有的属性
// 一个类可以有很多个子类;一个类只能有一个父类;
// 继承怎么实现
// ES5的继承
// 类 Man 男
// 新增数据属性:height
// 新增方法属性:playGame
function Man(name,age,weight,height){
// 调用父类的构造函数,初始化从父类继承来的属性
// 直接调用函数,默认函数内部this指向window,造成name等属性并没有添加到Man类对象上
// 注意:修改this指向,让People内部的this指向正在创建的Man类对象
// call方法修改this指向并调用函数,第一个参数就是this的新值,之后的参数是方法调用本来就需要的参数
People.call(this,name,age,true,weight)
this.height=height
}
// 将Man.prototype的原型从默认的Object.prototype改为People.prototype
// para1:指定的原型;返回值:新建的对象
Man.prototype=Object.create(People.prototype)
// 补上constructor属性
Man.prototype.constructor=Man
console.log(Man.prototype);
Man.prototype.playGame=function(){
console.log("王者荣耀");
}
var m=new Man("李四",25,60,176)
m.playGame()
// 访问对象的属性,顺着原型链找,子类可以使用父类的
m.study()
console.log(m);
// 访问对象的属性,顺着原型链找,父类不可以使用子类的
// peo.playGame()
//Man--People--Object
console.log(m instanceof Man);
console.log(m instanceof People);
console.log(m instanceof Object);
m.introduce()
peo.introduce()