JavaScript中的继承之类继承

 更新时间:2016年05月01日 10:07:53   作者:prince.shi  
在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。接下来通过本文给大家介绍JavaScript中的继承之类继承,感兴趣的朋友一起看看吧

继承简介

      在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以使用标准的基于类的继承,也可以使用更微妙一些的原型式继承。在JS中应该要明确一点,一切继承都是通过prototype来进行的,且JS是基于对象来继承的。

继承:

function Animal(name){ 
this.name = name; 
this.showName = function(){ 
alert(this.name); 
} 
} 
function Cat(name){ 
Animal.call(this, name); 
} 
var cat = new Cat("Black Cat"); 
cat.showName();

Animal.call(this) 的意思就是使用 Animal对象代替this对象,那么 Cat中不就有Animal的所有属性和方法了吗,Cat对象就能够直接调用Animal的方法以及属性了.

多继承:

function Class10() 
{ 
this.showSub = function(a,b) 
{ 
alert(a-b); 
} 
} 
function Class11() 
{ 
this.showAdd = function(a,b) 
{ 
alert(a+b); 
} 
} 
function Class2() 
{ 
Class10.call(this); 
Class11.call(this); 
}

很简单,使用两个 call 就实现多重继承了

当然,js的继承还有其他方法,例如使用原型链,这个不属于本文的范畴,只是在此说明call 的用法。说了call ,当然还有 apply,这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments。

下面给大家介绍如何在JavaScript中实现简单的继承?

下面的例子将创建一个雇员类Employee,它从Person继承了原型prototype中的所有属性。

function Employee(name, sex, employeeID) {
this.name = name;
this.sex = sex;
this.employeeID = employeeID;
}
// 将Employee的原型指向Person的一个实例
// 因为Person的实例可以调用Person原型中的方法, 所以Employee的实例也可以调用Person原型中的所有属性。
Employee.prototype = new Person();
Employee.prototype.getEmployeeID = function() {
return this.employeeID;
};
var zhang = new Employee("ZhangSan", "man", "");
console.log(zhang.getName()); // "ZhangSan

上面关于继承的实现很粗糙,并且存在很多问题:

在创建Employee构造函数和原型(以后简称类)时,就对Person进行了实例化,这是不合适的。

Employee的构造函数没法调用父类Person的构造函数,导致在Employee构造函数中对name和sex属性的重复赋值。

Employee中的函数会覆盖Person中的同名函数,没有重载的机制(和上一条是一个类型的问题)。

创建JavaScript类的语法过于零散,不如C#/Java中的语法优雅。

实现中有constructor属性的指向错误。

相关文章

  • JS设计模式之策略模式概念与用法分析

    JS设计模式之策略模式概念与用法分析

    这篇文章主要介绍了JS设计模式之策略模式概念与用法,简单分析了策略模式的基本概念、原理并结合实例形式分析了javascript实现与使用策略模式的相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • 分享5个JavaScript的写法小技巧

    分享5个JavaScript的写法小技巧

    写代码的时候总有一些东西是会重复出现的,次数多了你就会想找找捷径了,下面这篇文章主要给大家介绍了关于5个JavaScript的写法小技巧,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • WordPress 单页面上一页下一页的实现方法【附代码】

    WordPress 单页面上一页下一页的实现方法【附代码】

    下面小编就为大家带来一篇WordPress 单页面上一页下一页的实现方法【附代码】。小编觉得非常不错。给大家分享一下。希望能给大家一个参考。
    2016-03-03
  • 深入理解js A*寻路算法原理与具体实现过程

    深入理解js A*寻路算法原理与具体实现过程

    这篇文章主要介绍了js A*寻路算法原理与具体实现过程,结合实例形式详细分析了A*寻路算法的具体概念、原理、实现方法与相关操作技巧,需要的朋友可以参考下
    2018-12-12
  • javascript div 弹出可拖动窗口

    javascript div 弹出可拖动窗口

    创建弹出div窗口。
    2009-02-02
  • JavaScript异步编程中async函数详解

    JavaScript异步编程中async函数详解

    async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise
    2022-11-11
  • js判断文本框剩余可输入字数的方法

    js判断文本框剩余可输入字数的方法

    这篇文章主要介绍了js判断文本框剩余可输入字数的方法,可实现直观显示文本框可输入字数的功能,非常具有实用价值,需要的朋友可以参考下
    2015-02-02
  • 弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】

    弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】

    这篇文章主要介绍了弱类型语言javascript开发中的一些坑,结合实例形式总结分析了javascript开发中关于变量、函数、数组、对象、作用域等相关知识点常见易错问题,需要的朋友可以参考下
    2019-08-08
  • 新手如何快速理解js异步编程

    新手如何快速理解js异步编程

    这篇文章主要介绍了新手如何快速理解js异步编程,异步编程从早期的 callback、事件发布\订阅模式到 ES6 的 Promise、Generator 在到 ES2017 中 async,看似风格迥异,但是还是有一条暗线将它们串联在一起的,,需要的朋友可以参考下
    2019-06-06
  • 如何利用js在两个html窗口间通信

    如何利用js在两个html窗口间通信

    这篇文章主要介绍了如何利用js在两个html窗口间通信,如果读者们有类似的需求,可以参考下
    2021-04-04

最新评论