js 面向对象(多态)

本文探讨了JavaScript中的多态概念,包括子类对父类方法的重写,通过父类调用子类的不同实现,以及通过参数个数和类型实现多态的方式。示例代码展示了如何通过构造函数和原型链实现子类对父类方法的覆盖,并通过arguments对象判断参数数量执行不同逻辑。此外,还展示了如何根据参数类型执行不同的函数逻辑。
摘要由CSDN通过智能技术生成

js的多态
子类对父类方法的重写, 这个会默认执行子类的方法, 即实现多态
不同子类执行父类的同名方法会有不同的结果, 即下面这种
还有函数参数个数, 参数类型的多态

不同子类执行父类的同名方法会有不同的结果
实现方式
父类中调用未来子类的方法
子类的创建的时候, 写自己的方法, 继承父类, 调用父类的同名方法的时候, 父类原型上的this此时指向子类
这个时候就会调用不同子类的方法

   

function Base() {
      Base.prototype.initfun = function() {
        this.init()
      }
    }
    function Sub1 () {
      this.init = function() {
        console.log('1')
      }
    }
    function Sub2() {
      this.init = function() {
        console.log('2')
      }
    }
    Sub1.prototype = new Base()
    Sub2.prototype = new Base()
    new Sub1().initfun () // sub1的init方法
    new Sub2().initfun () // sub2的init方法



参数个数不同, 执行不同的代码
利用arguments.length判断来实现

function fun() {
      if(arguments.length === 0) {
        console.log('参数为0')
      } else if (arguments.length === 1) {
        console.log('一个参数', arguments[0])
      } else if (arguments.length === 2) {
        console.log('两个参数', arguments[0], arguments[1])
      }
    }
    fun() 
    fun(1)
    fun(1, 2)



参数类型不同的多态
利用typeof判断argument的类型进行判断

function fun2() {
      if (typeof arguments[0] === 'object' && typeof arguments[1] === 'string') {
        console.log('类型1')
      }else {
        console.log('类型2')
      }
    }
fun2({a:1}, 's'); fun2({a: 1}, 1)


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值