设为首页 加入收藏

TOP

JavaScript面向对象中的继承
2017-11-13 14:55:43 】 浏览:315
Tags:JavaScript 面向 对象 继承

1.1继承的基本概念


使用一个子类,继承另一个父类,那么子类可以自动拥有父类中的所有属性和方法,这个过程叫做继承。


>>>继承的两方,发生在两个类之间。


实现继承的三种方式


  扩展Object的prototype实现继承、使用call和apply和bind实现继承、使用原型实现继承。


  扩展Object的prototype实现继承的原理,就是通过循环,将父类对象的所有属性和方法,全部赋给子类对象。关键点在于for-in循环,即使不扩展object,也能通过简单的循环实现操作。


①定义一个父类


②定义一个子类


③通过prototype给object类添加一个扩展方法(通过for-in循环,将父类的属性和方法赋给子类)


④分别拿到父类对象,和子类对象


⑤用子类对象,调用扩展方法,实现继承操作


完整代码如下:


扩展Object的prototype实现继承的缺点:


  ①无法通过一次实例化,直接拿到完整的子类对象。而需要先拿到父类对象和子类对象两个对象,再手动合并;


  ②扩展object的继承方法,也会保留在子类对象上。


  通过原型实现继承的原理,就是将父类对象,赋值给子类的prototype,那么父类对象的属性和方法就会出现在子类的prototype中。那么,实例化子类时,子类的prototype又会到子类对象的__proto__中,最终,父类对象的属性和方法,会出现在子类对象的__proto__对象中。


具体实现步骤:


①定义一个父类


②定义一个子类


③将父类对象,赋值给子类的prototype


④拿到子类对象,就会将父类对象的所有属性和方法,添加到__proto__


完整代码如下:


通过原型实现继承的特点:


  ①子类自身的所有属性都是成员属性;父类继承过来的属性都是原型属性。


  ②依然无法通过一步实例化拿到完成的子类对象。


使用call和apply和bind实现继承的作用及区别:


1、三个函数的作用:通过函数名调用这三个函数,可以强行将函数中的this指定为某个对象


2、三个函数的写法(区别):(面试题爱问)


  call: func.call(func的this指向的obj,func参数1,func参数2,……);


  apply: func.call(func的this指向的obj,[func参数1,func参数2,……]);


  bind: func.call(func的this指向的obj)(func参数1,func参数2,……);


3、三个函数的唯一区别,在于接受func的参数列表的方式不同,除此之外,功能上没有任何差异!


具体实现步骤:


①定义一个父类


②定义子类时,在子类使用三个函数,调用父类,将父类函数的this,指向为子类函数的this


③实例化子类时,将自动继承父类属性


完整代码如下:


好了!今天就给大家分享一下java script面向对象中的继承~~如果有什么疑问,欢迎大家多多留言~~


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇JavaScript面向对象基础与this指.. 下一篇基于Lua脚本解决实时数据处理流程..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目