最近接触了一下html5,当然,接触过html5的人都知道,html5也不过是提供一些新的标签而已,至于整下实现的核心,还是在javascript这里。暑假还搞了ext4的web desktop,更多的也是javascript的东西。对于javascript,以前就只会document.getElementById()和alert(),现在才开始慢慢深入了解。如果本文有什么不对的地方,请指出。
关于javasript,它是基于对象的,因此,它没有类的概念,所以,如果要实现继承,也就只能是利用javascript的原型机制prototype去实现了。(其实这里是错的,感谢 @记忆的森林 的提示,还可以用apply和call去实现)
因为javascript没有专门的机制去实现类,所以这里只能是借助它的函数能够嵌套的机制来模拟实现类。在javascript中,一个函数,可以包含变量,也可以包含其它的函数,那么,这样子的话,我们就可以把变量做为类的属性,内部的函数则作为成员方法了。那么,外层的函数,就可以看成是一个类了。
1、首先我们写一个动物类吧,其实他是一个函数,只不过我们可以把它看成这个类的构造函数
function Animal(){
console.log('Call the constuctor.');
}
2、然后我们可以使用new关键字来创建一个myClass类的实例
这样,我们就创建了一个实例obj了,运行一下,使用相关的调试工具就可以看到Call the constructor的调试信息了。也就证明,我们创建类成功了。
3、那么,接下来,我们也可以给构造函数加上参数,比如:
function Animal(name){
this.name = name;
}
这样子,我们就可以创建实例,并且访问类的属性了
function myClass(name){
this.name = name;
}
var cat = new myClass("Kate");
alert(cat.name);
这样子,就可以访问到实例cat的属性name了。
4、大家都知道,动物会跳会吃,那么我们怎么给他加上方法呢?看下面
方法一:直接在构造函数里面声明方法
function Animal(name){
this.name = name;
this.jump = function(){
alert (this.name + " is jumping...");
};
this.eat = function(){
alert (this.name + " is eatting...");
};
}
var cat = new Animal("Kate");
alert(cat.name);
cat.jump();
cat.eat();
方法二:利用prototype为类添加方法
function Animal(name){
this.name = name;
}
Animal.prototype = {
type : 'cat',
jump : function(){
alert (this.name + " is jumping...");
},
eat : function(){
alert (this.name + " is eatting...");
}
}
var cat = new Animal("Kate");
alert(cat.name);
alert(cat.type);
cat.jump();
cat.eat();
同样的,我们也可以用同样的方法为类添加新的属性,如type....
5、上面我们讲到的,是javascipt中,怎么创建一个类,以及怎么为类添加属性以及方法,接下来,我们谈一下怎么实现类的继承。
要实现继承,我们可以通过prototype实现类的继承,首先,我们要先声明一个Dog类(如果还不懂,请重新看上面相关内容),并且让它继承Animal类。
function Dog(){};
Dog.prototype = new Animal("Henry");
然后我们可以实例化一只新的狗dog出来,试着调用它的方法,看看成功了吗?
function Dog(){};
Dog.prototype = new Animal("Henry");
var dog = new Dog();
dog.jump();
dog.eat();
显然,如果代码没敲错的话,应该可以看到提示“Henry is jumping...”,“Henry is eatting...”。
6、既然实现了类的继承,那就必然想到另外一个问题,那就是多态的问题。
多态是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态。
通过继承,子类已经继承了父类的方法了,但要实现多态,势必对子类的方法进行重写。
为了表达更明确,我们再创建一个Pig类出来,并且继承Animal类。怎么创建我就不说了。创建完的代码应该是像现在这样子。
function Dog(){};
Dog.prototype = new Animal("Henry");
function Pig(){};
Pig.prototype = new Animal("Coco");
var dog = new Dog();
dog.jump();
dog.eat();
var pig = new Pig();
pig.jump();
pig.eat();
运行之后,因为继承了Animal类的原因,结果肯定又是“XX is jumping...”,“XX is eatting...”了,那我们要实现的,就是进行方法的重写。我们可以有下面的方式实现方法的重写。
function Dog(){};//创建dog子类
Dog.prototype = new Animal("Henry");
//重写dog的方法
Dog.prototype.jump = function(){
alert("Hi, this is " + this.name + ", I'm jumping...")
};
Dog.prototype.eat = function(){
alert("Henry is eatting a bone now.");
};
function Pig(){};//创建pig子类
Pig.prototype = new Animal("Coco");
//重写pig的方法
Pig.prototype.jump = function(){
alert("I'm sorry. " + this.name + " can not jump.");
};
Pig.prototype.eat = function(){
alert("Hi, I'm " + this.name + ", I'm eatting something delicious.");
}
var dog = new Dog();
dog.jump();
dog.eat();
var pig = new Pig();
pig.jump();
pig.eat();
运行一下,是不是实现了对方法的重写呢??
6、那么,假如我实例化一只dog之后,我想单独为这只dog添加属性和方法,怎么做呢?看下面
var dog = new Dog();
//添加属性和方法
dog.type = "Doberman Pinscher";
dog.shout = function(){
alert("I'm a " + this.type + ".");
}
dog.jump();
dog.eat();
//调用新的方法
dog.shout();
7、好了,这篇文章就写到这里了。相信初学者对于类的创建与继承应该有一定的了解了。如果有什么问题,可以留言啊。多谢指教哦。
相关推荐
本书是一本全面、深入介绍JavaScript语言的学习指南。本书共分四个部分,第1部分帮助读者快速入手,掌握基本的JavaScript编程要点;第2部分介绍JavaScript的发展和技术背景;第3部分深入探索JavaScript,介绍了语法...
《Head First JavaScript源码》是2010年出版的一本中文版JavaScript学习书籍的源码,这本书以其独特的视觉设计和易理解的方式深入浅出地介绍了JavaScript编程语言。JavaScript是一种广泛应用于网页和网络应用的脚本...
《JavaScript权威指南》是JavaScript编程领域的一本经典之作,由著名技术作家David Flanagan撰写,被誉为"JavaScript犀牛书"。这本书深入浅出地讲解了JavaScript语言的核心概念、语法特性和高级特性,对于想要全面...
Author David Herman, with his years of experience on Ecma’s JavaScript standardization committee, illuminates the language’s inner workings as never before—helping you take full advantage of ...
在这个场景中,我们关注的是VS2015的安装过程中涉及到的证书问题以及两个特定的组件:JavaScript_ProjectSystem.msi和JavaScript_LanguageService.msi。 首先,关于“VS2015安装证书”,这通常是指安装过程中需要...
《JavaScript程序设计案例教程》课件(共13章)第1章 JavaScript程序设计案例教程.pdf《JavaScript程序设计案例教程》课件(共13章)第1章 JavaScript程序设计案例教程.pdf《JavaScript程序设计案例教程》课件(共13章)第...
JavaScript之Math对象(源代码)JavaScript之Math对象(源代码)JavaScript之Math对象(源代码)JavaScript之Math对象(源代码)JavaScript之Math对象(源代码)JavaScript之Math对象(源代码)JavaScript之Math对象...
web期末大作业 基于HTML+CSS+JavaScript实现的精美电商购物网站首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的精美电商购物网站首页源码 web期末大作业 基于HTML+CSS+JavaScript实现的精美电商购物网站首页...
JavaScript是一种广泛应用于网页和网络应用的编程语言,尤其在客户端脚本方面扮演着核心角色。这份"javascript试题(附答案)"是为初学者设计的,旨在帮助他们更好地理解和掌握JavaScript的基础知识。 一、变量与数据...
ArcGIS JavaScript API 介绍与示例 ArcGIS JavaScript API 是 ESRI 提供的一种基于 JavaScript 的开发工具,允许开发者创建交互式的 Web 地图应用程序。本文将对 ArcGIS JavaScript API 进行详细的介绍,并提供多个...
JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,高分项目)。 JavaScript 动态网页设计期末大作业CHASMISH眼镜网(纯手打,...
《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...
JavaScript是一种广泛应用于网页和网络应用开发的脚本语言,它主要负责实现客户端的交互效果、动态更新内容以及处理用户输入。在"JavaScript结课大作业.zip"这个压缩包中,我们可以推测这是一份关于JavaScript编程的...
3- JavaScript参考手册.chm 4- JavaScript参考手册中文版.chm 5- Javascript高级教程.CHM 6- JavaScript使用手册.chm 7- 网页制作完全手册.chm 8- 样式表滤镜中文手册.CHM 9- 样式表中文手册2.0.CHM
《javascript基础教程(第8版)》循序渐进地讲述了javascript 及相关的css、dom、ajax、jquery 等技术。书中从javascript 语言基础开始,分别讨论了图像、框架、浏览器窗口、表单、正则表达式、用户事件和cookie,并...
JavaScript DOM编程艺术(第2版)是一本深受程序员喜爱的JavaScript技术书籍,专注于讲解如何使用JavaScript与Document Object Model(DOM)进行交互。DOM是Web页面的结构化表示,它允许我们通过编程方式操纵HTML和XML...
JavaScript,作为全球最广泛使用的编程语言之一,是前端开发的核心技术。这个名为"JavaScript前端开发案例教程-源代码.rar"的压缩包文件提供了一系列实践案例,帮助开发者深入理解和掌握JavaScript在网页开发中的...
但是,根据标题《JavaScript DOM编程艺术【第2版&高清】.pdf》和描述“JavaScript DOM编程艺术,高清资源,无比经典,值得拥有”,我们可以推断这本书主要讲述了JavaScript中DOM(文档对象模型)的相关编程技术。...
JavaScript,作为一种广泛应用于Web开发的脚本语言,已经成为现代互联网技术不可或缺的一部分。《JavaScript高级程序设计》(第3版)是一本深入探讨该语言精髓的权威书籍,它为读者提供了全面且深入的JavaScript知识...