js 如何实现继承呢?
下面是一个简单的继承demo
console.clear(); //child 继承 parent var extend=function(child,parent) { child.prototype=new parent(); } function A(){ this.name="A"; this.sayHello=function(){ console.log("Hello , "+this.name); } } function B(){ this.sex='man'; this.mySex=function(){ console.log("sex:"+this.sex); } } extend(B,A); var b=new B(); b.mySex(); b.sayHello();
运行结果:
sex:man
Hello , A
说明:B 本身没有sayHello 方法,而是从A 继承过来的.
那么我们再让B继承另外一个类C
function C(){ this.age=26; this.myAge=function(){ console.log("age:"+this.age); } } extend(B,A); extend(B,C); var b=new B(); b.mySex(); b.sayHello();
报错:
继承C 之后,调用sayHello竟然报错,但是sayHello不是从A 继承过来的吗?
说明我们的继承方法有问题:
var extend=function(child,parent) { child.prototype=new parent(); }
B先继承A,然后继承C,那么之前继承A的属性都没了.这显然不合要求.
所以我优化一下继承方法:
//child 继承 parent var extend=function(child,parent) { var p1=child.prototype; child.prototype=new parent(); child.prototype.__proto__=p1; }
完整代码如下:
console.clear(); //child 继承 parent var extend=function(child,parent) { var p1=child.prototype; child.prototype=new parent(); child.prototype.__proto__=p1; } function A(){ this.name="A"; this.sayHello=function(){ console.log("Hello , "+this.name); } } function B(){ this.sex='man'; this.mySex=function(){ console.log("sex:"+this.sex); } } function C(){ this.age=26; this.myAge=function(){ console.log("age:"+this.age); } } extend(B,A); extend(B,C); var b=new B(); b.mySex(); b.sayHello(); b.myAge();
执行结果:
sex:man
Hello , A
age:26
即B 成功地调用了A和C 的方法
我们继续优化,因为__proto__在IE中不能访问.
优化的结果:
//child 继承 parent var extend=function(child,parent) { var p1=child.prototype; var p2=parent.prototype; parent.prototype=p1; child.prototype=new parent(); parent.prototype=p2; } function A(){ this.name="A"; this.sayHello=function(){ console.dir("Hello , "+this.name); } } function B(){ this.sex='man'; this.mySex=function(){ console.dir("sex:"+this.sex); } } function C(){ this.age=26; this.myAge=function(){ console.dir("age:"+this.age); } } extend(B,A); extend(B,C); var b=new B(); b.mySex(); b.sayHello(); b.myAge(); console.dir(A); console.dir(B); console.dir(C);
运行结果:
继承方法:
//child 继承 parent var extend=function(child,parent) { var p1=child.prototype; var p2=parent.prototype; parent.prototype=p1; child.prototype=new parent(); parent.prototype=p2; delete p1; delete p2; }
相关推荐
1. **原型链继承**:这是最基础的继承方式,通过修改子类的`prototype`为父类的实例,实现共享父类的属性和方法。例如: ```javascript function subObj() {} subObj.prototype = new myObj2(); ``` 这种方法...
根据提供的文件信息,我们可以分析并总结出关于JavaScript继承的一些关键知识点。尽管提供的代码示例主要关注于使用jQuery插件初始化一个表格(grid),但这里我们将重点放在如何在JavaScript中实现继承这一主题上。...
除了传统的原型链继承,JavaScript还支持其他继承模式,如组合继承(组合使用构造函数和原型链)、寄生继承(通过创建父类副本改进继承)、原型式继承(使用`Object.create()`)、寄生组合式继承(被认为是最有效的...
### JS继承的实现方式 JavaScript作为一种灵活且功能强大的编程语言,支持多种继承模式。下面将详细介绍几种常见的继承实现方式,并探讨它们的特点与应用场景。 #### 一、原型链继承 **核心思想**: 将父类的实例...
1. **原型链继承**:JavaScript的对象都有一个proto属性,指向创建它的函数的原型对象。通过修改原型对象,可以实现属性和方法的继承。这是JavaScript中最基础的继承方式。 2. **构造函数继承**:通过调用父类构造...
### JavaScript继承实现示例 #### 知识点概述 在JavaScript中,继承是一种常见的对象间关系,它允许一个对象(子类)继承另一个对象(父类或超类)的属性和方法。通过继承,可以复用代码、提高程序的可维护性,并...
js没有特别明确的实现如何继承,但是能够通过特殊手段实现继承的,有四种方法
1.父类 2.子类 3.实现Student 继承 Person 1.父类 2.子类 3.实现Student 继承 Person 1.父类 2.子类
我们还知道,面向对象编程有三个重要的概念 - 封装、继承和多态。 但是在JavaScript的世界中,所有的这一切特性似乎都不存在。 因为JavaScript本身不是面向对象的语言,而是基于对象的语言。
JavaScript支持多种继承机制,包括原型链继承、构造函数继承、组合继承、寄生式继承以及寄生组合继承等。接下来,我们将详细探讨这些继承方式。 ### 1. 原型链继承 原型链继承是通过将一个对象设置为另一个对象的...
在JavaScript中,有多种实现继承的方法,包括原型链继承、构造函数继承、组合继承、寄生继承、原型式继承、共享原型等。`zInherit`是其中的一种自定义实现,它通常通过修改对象的原型(prototype)来实现继承关系。 ...
本篇文章将深入探讨JavaScript继承的实例,以及如何通过继承来提高代码的可维护性和效率。 首先,我们需要了解JavaScript中的原型(prototype)机制。每个JavaScript对象都有一个内部属性[[Prototype]],通常通过`_...
在JavaScript中,面向对象编程是其核心特性之一,而继承和派生则是实现面向对象的重要机制。本资料集合关注的是JavaScript中的继承派生以及与之相关的`apply`和`call`方法。 **继承**是面向对象编程的关键概念,...
本文将深入探讨JavaScript中的类和继承,并结合`prototype.js`文件中的示例进行解析。 ### 类的概念与模拟 在JavaScript中,我们通常使用函数来模拟类的行为。一个函数可以看作是一个类的定义,通过`new`关键字来...
在本章中,我们将分析Prototypejs中关于JavaScript继承的实现。 Prototypejs是最早的JavaScript类库,可以说是JavaScript类库的鼻祖。 我在几年前接触的第一个JavaScript类库就是这位,因此Prototypejs有着广泛的...
1. 原型链继承(Prototype Chain Inheritance) 原型链是JavaScript实现继承的基础。每个函数都有一个`prototype`属性,这个属性是一个对象,它的`__proto__`属性指向创建该函数的构造函数的原型。当试图访问一个...
JavaScript继承机制研究 在本文中,我们将深入探讨JavaScript继承机制的实现方式,并对基于原型的继承、构造函数方式继承、组合继承、寄生式继承等继承机制进行了总结归纳和分析。 基于原型的继承 JavaScript是...
javascript中如何实现封装,继承和多态
在提供的`ClassDefineAndExtends.js`文件中,可能包含了关于类定义和继承的示例代码。通过分析这个文件,我们可以看到实际应用中的类定义和继承实践,包括如何定义类,如何使用构造函数初始化对象,以及如何通过`...