Javascript中类的创建与继承(ES5,ES6)

一、ES5中,

  • a. 类的创建
    new一个function类,在function中的prototype里面添加属性和方法,例如先创建一个Animal类,并且添加一个原型方法eat
//定义一个动物类
function Animal(name){
    this.name=name   //属性
    this.text=function(){  //实例方法
        console.log('text')
    }
}
Animal.prototype.eat=function(){
    console.log('吃吃吃')
}
  • b.类的引用与继承
    创建一个Dog类,添加age属性将Animal中的实例属性与方法通过apply()应用到Dog中。这时我们创建一个dog继承自Dog类给他两个参数,这时我们利用instanceof进行结果的判断。dog继承自Dog,但是Dog并不继承自Animal,并且dog不能调用Animal的原型方法,只是将其的实例属性与方法进行了引用
function Dog(name,age){
    Animal.apply(this,arguments)  //借用不是继承
    this.age=age
}
var dog = new Dog('zs',12)
console.log(dog)//打印dog,
console.log(dog instanceof Dog)  //dog是否继承于Dog  结果为true
console.log(Dog instanceof Animal)//Dog是否继承于Animal  结果为false
// dog.eat()   //不能调用原型中的方法

当我们将Dog的原型设置为Animal时,则Dog继承自Animal,dog1也继承自Animal,dog1也可以调用Animal中的原型方法

Dog.prototype=new Animal()
var dog1 = new Dog('ls',17)
console.log(dog1)
console.log(Dog instanceof Animal)  //true
console.log(dog1 instanceof Animal)  //true
dog1.eat()   //调用原型方法

二、ES6
ES6中添加了class,目的是为了更接近与传统的语法,使用class创建类,extends进行继承

class Animal{
       //每一个类都有构造器,如果没有写会被自动添加
    constructor(name,age){
        this.name=name
        this.age=age
    }        
    eat(){ // 实例方法   原型方法
        // 实际上类的所有方法都定义在类的prototype属性上面
        // 在类的实例上面调用方法,其实就是调用原型上的方法。  
        console.log('吃吃吃')
    }
     //静态方法
    static sleep(){// 静态方法只能由类本身进行调用,实例不能调用
        console.log('睡睡睡')
    }
}
class Dog extends Animal{
    constructor(name,age,gender){
        super(name,age)
        this.gender=gender
    }
    food(){
        super.eat()
    }
    static night(){
        super.sleep()
    }
}
let dog = new Dog('zs',12,'male')
console.log(dog)
console.log(dog instanceof Dog)   //true
console.log(Dog instanceof Animal)  //true
console.log(dog instanceof Animal)  //true
dog.food()
// dog.night()    //不能调用静态方法,只能类本身调用
Dog.night()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值