javascript其实也是一种面向对象编程语言,他同样可以实现面向对象语言的三大特性------封装,继承,多态。封装我想大家都知道了,在这里我们重点讲一下javascript的继承。
1、怎么用javascript编写一个类
(1)目前,很多面向对象语言都定义了class来定义一个类,但是javascript并没有,那么我们应该怎么去用它来编写一个类呢?
其实我们简单的是使用function就可以啦。下面给一个例子,我想大家看后就会明白的啦。在实例中学习嘛,哈哈。
function Person(){ //定义一个Person类
this.name;
this.age;
this.showInfo = function(){ //封装一个方法,让Person类输出自己的相关信息
document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");
}
}
var person = new Person(); //创建Person类的实例
person.name = "tom"; //为Person类的属性赋值
person.age = 11;
person.showInfo(); //调用Person类的方法
在浏览器中的结果显示为:
大家好,我是 tom ,今年 11 岁啦!
但是如果我们想要给函数定义一个构造函数怎么办,看这个例子你就懂了:
function Person(myName, myAge){ //定义一个Person类
this.name = myName;
this.age = myAge;
this.showInfo = function(){ //封装一个方法,让Person类输出自己的相关信息
document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");
}
}
var person = new Person("tom", 11); //创建Person类的实例
person.showInfo(); //调用Person类的方法
结果显示跟上面一样。
2、怎么实现继承特性
那么我们用javascript编写好一个类后,我们怎么去实现继承呢?这个就涉及到我们前面所学的prototype啦。
//定义一个父类Person
function Person(){
this.name ;
this.age ;
this.showInfo = function(){ //封装一个方法,让Person类输出自己的相关信息
document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");
}
}
//定义一个子类Child
function Child(){}
Child.prototype = new Person(); //继承Person
var child = new Child();
child.name = "Cat";
child.age = 11;
child.showInfo();
在浏览器中显示的结果为:
大家好,我是 Cat ,今年 11 岁啦!
在该实例中,重点在于prototype,我们继承就是通过这个来实现的啦,这个将涉及到原型,深入就到后面再讲,在这篇文章中,主要是为了让我们知道,继承是通过这个方式来实现的,当然还有另外一中形式。下面就来说一下吧。
3、使用$super实现访问父类
很多面向对象编程语言中,都会定义关键字super来访问父类,但是javascript里面没有,所以我们必须要先自己定义来实现这个功能,鉴于javascript所有的类都是有Object派生而来的,我们就为Object新定义一个$super方法,该方法可以用于其他所有的类。
//自定义$super()方法,用于访问父类
Object.prototype.$super = function(){
var result;
try{
result = eval(this.constructor).prototype.constructor;
result.apply(this, arguments);
}catch(err){
throw new Error("only can be used in constructor");
}
return result;
}
然后我们就可以使用这个方法啦:
function Child(){
this.$super(myName, myAge); //调用父类的构造函数
}
下面给出一个完整示例,让大家对它的用法更加清晰吧。
示例1(仍然使用prototype来实现继承):
//自定义$super()方法,用于访问父类
Object.prototype.$super = function(){
var result;
try{
result = eval(this.constructor).prototype.constructor;
result.apply(this, arguments);
}catch(err){
throw new Error("only can be used in constructor");
}
return result;
}
//定义一个父类Person
function Person(myName, myAge){
this.name = myName;
this.age = myAge;
this.showInfo = function(){ //封装一个方法,让Person类输出自己的相关信息
document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");
}
}
//定义一个子类Child
function Child(myName, myAge){
this.$super(myName, myAge);//调用父类的构造函数
}
Child.prototype = new Person(); //继承Person
var child = new Child("Tom", 11);
child.showInfo();
示例2(仍然使用$super来实现继承):
Object.prototype.$super = function(){
var result;
try{
result = eval(this.constructor).prototype.constructor;
result.apply(this, arguments);
}catch(err){
throw new Error("only can be used in constructor");
}
return result;
}
//定义一个父类Person
function Person(myName, myAge){
this.name = myName;
this.age = myAge;
this.showInfo = function(){ //封装一个方法,让Person类输出自己的相关信息
document.write("大家好,我是 " + this.name + " ,今年 " + this.age + " 岁啦!");
}
}
//定义一个子类Child
function Child(myName, myAge){
this.$super = Person; //继承Person
this.$super(myName, myAge);
}
var child = new Child("Tom", 11);
child.showInfo();
两个示例输出的结果均为:
大家好,我是 Tom ,今年 11 岁啦!
分享到:
相关推荐
JavaScript的基于原型的继承风格使用起来非常灵活、高效,但对于初学者,要准确理解原型对象及其继承机制还是比较困难。本文将对JavaScript原型继承的方式进行介绍,并结合实例进行分析。 基于类的继承 面向对象...
- **第三章:JavaScript中的类和对象**:详细介绍如何使用JavaScript创建类和对象。 - **第四章:继承**:探讨JavaScript中实现继承的不同方式。 - **第五章:封装和私有性**:讲解如何在JavaScript中实现封装以及...
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的、解释型的编程语言,主要用于增强网页的交互性。这份“JavaScript手册—中文文档”提供了一个全面的JavaScript学习资源,涵盖了从基础语法到高级特性的...
本文将深入探讨JavaScript中的原型继承机制,帮助读者理解其中的关键概念及其工作原理。 #### 二、原型与构造函数 在JavaScript中,每个函数都有一个特殊的属性——`prototype`。当一个函数被用作构造函数时,它的...
在JavaScript中,继承并不是基于传统的类,而是基于原型(prototype)。这意味着一个对象可以直接从另一个对象继承属性和方法。下面将深入探讨JavaScript继承的特性及其实践应用。 1. 伪类继承: JavaScript 的...
### 面向对象的JavaScript编程及其Scope处理 #### 一、JavaScript的面向对象特性 JavaScript作为一种弱类型的脚本语言,虽然本质上不是一种面向对象的语言,但我们可以通过巧妙地利用其特性来实现面向对象编程...
9. **类的静态属性和方法**:在JavaScript的类语法中,可以定义静态属性和方法,它们不归属于任何实例,而是直接属于类本身。 10. **鸭子类型和接口**:JavaScript中没有强制的类型检查,因此实现接口的方式比较...
另外,随着ES6(ECMAScript 2015)及其后续版本的发布,JavaScript引入了许多新的语法特性,如箭头函数、模板字符串、let和const变量、解构赋值、模块导入导出、类和扩展运算符等。这些新特性提高了代码的可读性和可...
JavaScript中的数据类型有Number、String、Boolean、null、undefined、数组和对象等,这些类型及其操作构成了编程的基础。 接着,掌握条件判断和循环结构对于编写有效的JavaScript代码至关重要。Map和Set是ES6引入...
5. 多人开发中的函数重名问题:为避免重名,可以制定命名规范,如在函数名前加上开发人员的名字或功能前缀,或者将函数封装到类中,通过类的方法调用。 6. 面向对象的继承:JavaScript的继承主要通过构造函数和...
- **类与继承**:ES6中的`class`语法提供了一种更加直观的方式来定义类和实现继承。例如: ```javascript class Animal { constructor(name) { this.name = name; } speak() { console.log(this.name + ' ...
在这个"javascript作业题答案"的压缩包中,我们可以期待找到一系列与JavaScript相关的练习题及其解答,这对于学习和掌握JavaScript的重要知识是非常有帮助的。 首先,JavaScript的核心知识点包括变量、数据类型、...
- 类的基本语法和继承。 - 静态属性和方法以及私有和受保护属性的使用。 - 混入(Mixins)的概念。 **错误处理和异步编程** 对于错误处理和异步编程,教程涵盖了以下内容: - 错误处理和`try..catch`语句。 - ...
ES6引入了`class`语法,使得在JavaScript中定义类变得更加直观。实际上,ES6的类语法是对原型继承的一种封装,它提供了一种更加清晰的方式来组织代码。 ##### 3.1 定义类 ```javascript class Person { ...
对于那些熟悉C++或Java等语言中的类为基础的OOP模型的开发者来说,JavaScript提供了另一种实现OOP的方式——基于原型的继承。 #### 书籍简介与适用人群 本书适合所有对JavaScript和面向对象编程感兴趣的开发者。...
7. 类与模块:在ES6中,了解类的概念及其与传统构造函数的关系,以及模块系统(import和export)的应用。 三、高级JavaScript特性 8.闭包:理解闭包的定义,以及它在内存管理、数据封装和异步编程中的重要性。 9. ...
这个中文手册可能是对ECMAScript标准的详细解读,包括最新的ES6及其后续版本的新特性,如箭头函数、模板字符串、Promise、Generator、Async/Await、模块化(import/export)、类和继承等。此外,还可能涉及错误处理...