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中类的继承可以参考阮一峰的Blog《Javascript继承机制的设计思想》,说的很透。 一、在javascript中实例化遇到的问题: 下面用《javascript高级程序设计》中的例子来做说明,假如现在定义了一个car的...
JavaScript是Web开发中不可或缺的一部分,它是一种轻量级的、解释型的编程语言,主要用于增强网页的交互性。这份“JavaScript手册—中文文档”提供了一个全面的JavaScript学习资源,涵盖了从基础语法到高级特性的...
9. **类的静态属性和方法**:在JavaScript的类语法中,可以定义静态属性和方法,它们不归属于任何实例,而是直接属于类本身。 10. **鸭子类型和接口**:JavaScript中没有强制的类型检查,因此实现接口的方式比较...
另外,随着ES6(ECMAScript 2015)及其后续版本的发布,JavaScript引入了许多新的语法特性,如箭头函数、模板字符串、let和const变量、解构赋值、模块导入导出、类和扩展运算符等。这些新特性提高了代码的可读性和可...
5. 多人开发中的函数重名问题:为避免重名,可以制定命名规范,如在函数名前加上开发人员的名字或功能前缀,或者将函数封装到类中,通过类的方法调用。 6. 面向对象的继承:JavaScript的继承主要通过构造函数和...
在这个"javascript作业题答案"的压缩包中,我们可以期待找到一系列与JavaScript相关的练习题及其解答,这对于学习和掌握JavaScript的重要知识是非常有帮助的。 首先,JavaScript的核心知识点包括变量、数据类型、...
7. 类与模块:在ES6中,了解类的概念及其与传统构造函数的关系,以及模块系统(import和export)的应用。 三、高级JavaScript特性 8.闭包:理解闭包的定义,以及它在内存管理、数据封装和异步编程中的重要性。 9. ...
这个中文手册可能是对ECMAScript标准的详细解读,包括最新的ES6及其后续版本的新特性,如箭头函数、模板字符串、Promise、Generator、Async/Await、模块化(import/export)、类和继承等。此外,还可能涉及错误处理...
7. **正则表达式**:用于文本匹配和处理的强大工具,及其在JavaScript中的应用。 接下来,我们转向《高性能JavaScript》。这本书的重点在于优化JavaScript代码的性能,确保应用程序的高效运行。书中可能包含以下...
4. **面向对象编程**:尽管JavaScript是非严格的面向对象语言,但它支持基于原型的继承和类的模拟,这部分内容会涵盖类与实例、原型链、继承模式(如构造函数、原型链继承、寄生组合式继承等)。 5. **异步编程**:...
- 类与继承:ES6引入了类的语法糖,以及基于prototype的继承机制。 - 解构赋值:方便地从数组或对象中提取数据,赋值给变量。 - 基于Map和Set的数据结构:提供了新的集合操作,适用于特定场景。 - Generator函数...
理解这些类型及其转换规则是JavaScript编程的基础。 2. **控制流**:条件语句如if...else和switch,以及循环语句如for、while和do...while,用于根据特定条件执行代码或重复执行某段代码。另外,break和continue...
7. **ES6及以后的版本更新**:书中也会涉及ECMAScript 6及其后续版本的新特性和最佳实践,如箭头函数、模板字符串、类、模块系统等,这些都是现代JavaScript开发不可或缺的知识。 8. **编程实践**:除了理论知识,...
- 函数是JavaScript中可复用的代码块,可以使用`function`关键字定义。函数可以接受参数,并通过`return`语句返回值。 - 高阶函数,如接受函数作为参数或返回函数的函数,是JavaScript的重要特性。 5. **数组和...
4. **类(class)和继承**:虽然JavaScript原生支持原型继承,但ES6引入了类的语法,使得面向对象编程更加直观。 5. **解构赋值**:可以方便地从数组或对象中提取值,用于简化代码,比如从事件对象中获取点击事件的...
源代码可能涵盖类的定义、继承、封装和多态等概念。 10. **调试技巧**:学会使用console.log、断点、步进执行等工具进行代码调试,是提高开发效率的重要手段。 通过这个源码实例库,学习者可以逐个拆解和运行实例...
原型和原型链是JavaScript继承的基础,它们使得对象之间可以共享属性和方法。此外,ES6引入了类(class)语法,提供了更面向对象的编程风格。 事件处理是JavaScript在网页交互中的关键,如点击事件(click)、鼠标...
最后,本书还涉及了一些现代JavaScript特性,如ES6及其后续版本的新特性,如箭头函数、模板字符串、类和模块系统等,这些都是现代JavaScript开发不可或缺的部分。 总的来说,《JavaScript入门经典(第6版)》是一本...