JS高级---继承

继承:
1.通过修改原型对象的指向实现继承
 缺陷:所有的属性都是一样的
2.借用构造函数实现继承
   构造函数名字.call(当前对象,属性1,属性2...)
   缺陷:虽然可以实现属性的不同  但是方法不能继承
3.组合继承:原型对象+借用构造函数
   属性可以不重复,方法也可以继承 
4.拷贝继承:把一个对象中的属性和方法自己拷贝到另一个对象中
  使用for-in 循环,将一个对象中的所有属性和方法赋值给另一个对象
1.修改原型对象的指向实现继承
//人的构造函数
function Person(name,age,sex) {
    this.name=name
    this.age=age
    this.sex=sex
}
Person.prototype.eat=function () {
    console.log("恰饭");
}
//学生的构造函数
function Student(score) {
    this.score=score
}

//改变指向
Student.prototype=new Person("小萌",16,"女")
//通过原型添加学习方法
Student.prototype.study=function () {
    console.log("打游戏");
}

//实例化学生对象
var stu=new Student(61)
console.log(stu.name);
console.log(stu.age);
console.log(stu.sex);
stu.eat()
console.log("学生对象下自己的属性===");
console.log(stu.score);
stu.study()

var stu1=new Student(59)
console.log(stu1.name, stu1.age, stu1.sex, stu1.score);

2.借用构造函数实现继承

//人的构造函数
function Person(name,age) {
    this.name=name
    this.age=age//this 指的是当前的实例对象
}
//通过原型对象添加eat方法
Person.prototype.eat=function () {
    console.log("恰饭");
}

//学生的构造函数
function Student(score,name,age) {
    Person.call(this,name,age)
    this.score=score
    this.name=name
    this.age=age
}

Student.prototype.study=function () {
    console.log("恰饭");
}
var stu1=new Student(60,"小萌",16)
console.log(stu1.name, stu1.age, stu1.score);

var stu2=new Student(69,"小洁",18)
console.log(stu2.name, stu2.age, stu2.score);

var stu3=new Student(80,"薇薇安",20)
console.log(stu3.name, stu3.age, stu3.score);

3.组合继承:原型对象+借用构造函数

/创建人的构造函数
function Person(name,age) {
    this.name=name
    this.age=age
}
Person.prototype.eat=function () {
    console.log(this.age+"恰饭恰饭");
}

//创建学生函数
function Student(name,age,score) {
    Person.call(this,name,age)
    this.score=score
}
//修改原型指向
Student.prototype=new Person()//不传值
Student.prototype.study=function () {
    console.log(this.name+"玩游戏,玩到老");
}
var stu1=new Student("小萌",16,80)
console.log(stu1.name, stu1.age, stu1.score);
stu1.study()
stu1.eat()

var stu2=new Student("小洁",17,90)
console.log(stu2.name, stu2.age, stu2.score);
stu2.study()
stu2.eat()

var stu3=new Student("薇薇安",18,100)
console.log(stu3.name, stu3.age, stu3.score);
stu3.study()
stu3.eat()

4.拷贝继承:把一个对象中的属性和方法自己拷贝到另一个对象中

function Person() {

}

Person.prototype.name="李靖"
Person.prototype.age=18
Person.prototype.sex="男"
Person.prototype.tuoTa=function () {
    console.log("托塔李天王");
}
var obj2={}
for (var key in Person.prototype){
    obj2[key]=Person.prototype[key]
}
console.dir(obj2);

var key="name属性"
var key="age属性"
var key="sex属性"
var key="tuota方法名"
//获取对象的属性  对象:属性名  对象["属性"]
for (var key in Person.prototype){
    console.log(key + "======" + Person.prototype);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值