第四节 继承
本节是比较java与js如何实现继承
java的类定义包括类和接口。类之间和接口之间可以分别通过extends关键字实现继承。类
和接口不支持多重继承,只能有一个祖先。但一个类可以实现多个接口,这可以理解为一种特
殊的多重继承。无论extends还是implements,都是可以对子类使用instanceof运算符,并返回
为true.
js中没有明确规定的继承机制,这些都是开发者通过模仿实现的。所以有些继承的细节有各种不
同的方式:
1. 对象冒充
父类定义的构造函数使用this关键字给所有属性和方法赋值,子类使父类的构造函数成子类
的方法,然后调用它,将
父类的方法和属性在子类中定义。这里可以实现从多个类多重继承,但如果有同名方法和属性,
后一个的调用的构造函数具有优先性。
function ClassA(sColor) {
this.color = sColor;
this.sayColor = function() {
alert(this.color);
};
}
fuction ClassB(sColor, sName){
this.newMethod = ClassA;
this.newMethod(sColor);
delete this.newMethod;
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
2. call方法
call方法与经典的对象冒充最相似。
function ClassA(sColor) {
this.color = sColor;
this.sayColor = function() {
alert(this.color);
};
}
fuction ClassB(sColor, sName){
//this.newMethod = ClassA;
//this.newMethod(sColor);
//delete this.newMethod;
ClassA.call(this, sColor);
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
3. apply方法
apply方法与call也相似,只是换用apply()方法,并且使用参数数组
function ClassA(sColor) {
this.color = sColor;
this.sayColor = function() {
alert(this.color);
};
}
fuction ClassB(sColor, sName){
//this.newMethod = ClassA;
//this.newMethod(sColor);
//delete this.newMethod;
ClassA.apply(this, new Array(sColor));
this.name = sName;
this.sayName = function () {
alert(this.name);
};
}
4. 原型链
原型是一种对象模板,能够形成原型链,将父类的所有属性和方法都赋值给子类的实例。这
种方法的弊端是不支持多重继承。并且对于所有子类的实例,instancof父类和子类本身都返回true。
function ClassA(sColor) {
this.color = sColor;
}
ClassA.prototype.sayColor = function () {
alert(this.color);
}
fuction ClassB(sColor, sName){
}
ClassB.prototype = new ClassA();
ClassB.prototype.name = "";
ClassB.prototype.sayName = function(){
alert(this.name);
}
5. 混合方式
使用对象冒充继承父类的属性,使用原型链方式继承父类的方法。
function ClassA(sColor) {
this.color = sColor;
}
ClassA.prototype.sayColor = function () {
alert(this.color);
}
fuction ClassB(sColor, sName){
ClassA.call(this, sColor);
this.name = sName;
}
ClassB.prototype = new ClassA();
ClassB.prototype.sayName = function(){
alert(this.name);
}
利用第三方js库zInherit和xbObjects对继承也有一些不错的支持。
分享到:
相关推荐
Javascript 面向对象的JavaScript进阶 Javascript技术
猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip.lnk猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个方法开发.zip.lnk猜拳游戏:java面向对象,kotlin面向对象,js面向对象,3个...
面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...
java面向对象考题和答案.doc
原型是理解继承概念的关键, 我们将会教你如何建立原型, 如何检测一个对象是否是另外一个对象的原型, 及其 JavaScript 的模型与Java 面向对象编程之间的区别。我们同样会向你展示如何检测对象所包含的各种属性的方法...
JAVA面向对象基础测试题-继承-封装-多态等测试题.docx
《JAVA面向对象程序设计》练习题---参考答案.doc
[No Starch Press] JavaScript 面向对象设计原则 (英文版) [No Starch Press] The Principles of Object-Oriented JavaScript (E-Book) ☆ 图书概要:☆ If you've used a more traditional object-oriented ...
java面向对象测试2.doc
熟练掌握JAVA面向对象编程语言,有良好的编码习惯 熟悉常用的JavaAPI,包括多线程、IO、Socket、JDBC、XML、反射等 熟练使用HTML、CSS、JavaScript、JQuery,并了解Ajax 熟练使用JSP、Servlet、javaBean进行web应用...
java教程3 java面向对象编程.ppt
java面向对象考题和标准答案.doc
JavaScript中支持面向对象的基础
JavaScript面向对象编程 在JavaScript对象笔记中,记录的都是内置对象的使用,而本文的目的是学习如何创建自己的对象,如何在JS中进行面向对象编程,并且以这些为指导编写实用的工具。
Java面向对象之静态.doc
Java面向对象选择试题.doc
java面向对象精华总结.doc
java面向对象题带答案.doc
JAVA面向对象程序设计教案.doc
Java面向对象编程练习题.doc