欢迎来到天天文库
浏览记录
ID:6858334
大小:36.00 KB
页数:8页
时间:2018-01-28
《javascript 定义类,定义属性,定义方法的几种方式详解及分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、JavaScript定义类,定义属性,定义方法的几种方式详解及分析提起面向对象我们就能想到类,对象,封装,继承,多态。在《javaScript高级程序设计》(人民邮电出版社,曹力、张欣译。英文名字是:ProfessionalJavaScriptforWebDevelopers)这本书中描述的还算比较详细。我们看看JavaScript中定义类的各种方法。1.工厂方式 javaScript中创建自己的类和对象,我们应该是必须掌握的,我们都知道javaScript中对象的属性可以在对象创建后动态定义,比如下面的代码:2、ipt"> //定义 varoCar=newObject(); oCar.color="red"; oCar.doors=4; oCar.showColor=function(){ alert(this.color); } //调用 oCar.showColor(); 我们很容易使用oCar对象,但是我们创就是想创建多个Car实例。我们可以使用一个函数来封装上面的代码来实现: //定义 functioncreateCar(){ 3、 varoCar=newObject(); oCar.color="red"; oCar.doors=4; oCar.showColor=function(){ alert(this.color); } returnoCar; } //调用 varocar1=createCar(); varocar2=createCar(); ocar1.color="black"; ocar1.showColor(); ocar2.showColor();4、ipt> 顺便说一下,javaScript对象默认成员属性都是public的。这种方式我们称为工厂方式,我们创造了能创建并返回特定类型的对象的工厂。 这样做有点意思了,但是在面向对象中我们经常使用创建对象的方法是:Carcar=newCar(); 使用new关键字已经深入人心,因此我们使用上面的方法去定义总感觉别扭,并且每次调用时都去创建新的属性以及函数,功能上也不实际。下来我们看看构造函数的形式定义类。2.构造函数这种方式看起来有点象工厂函数。具体表现如下: //定义 functio5、nCar(color,doors){ this.color=color; this.doors=doors; this.showColor=function(){ alert(this.color); }; } //调用 varcar1=newCar("red",4); varcar2=newCar("blue",4); car1.showColor(); car2.showColor(); 看起来效果很明显,有差别了吧。感觉有点意思了。在构造函数内部6、创造对象使用this关键字,使用new运算符创建对象感觉非常亲切。但是也有点问题:每次new对象时都会创建所有的属性,包括函数的创建,也就是说多个对象完全独立,我们定义类的目的就是为了共享方法以及数据,但是car1对象与car2对象都是各自独立的属性与函数,最起码我们应该共享方法。这就是原形方式的优势所在。3.原型方式利用对象的prototype属性,可把它看出创建新对象所依赖的原型。方法如下: //定义 functionCar(){ }; Car.prototype.color="red7、"; Car.prototype.doors=4; Car.prototype.drivers=newArray("Tom","Jerry"); Car.prototype.showColor=function(){ alert(this.color); } //调用: varcar1=newCar(); varcar2=newCar(); car1.showColor(); car2.showColor(); alert(car1.drivers); car1.drivers.push("stephen")8、; a
2、ipt"> //定义 varoCar=newObject(); oCar.color="red"; oCar.doors=4; oCar.showColor=function(){ alert(this.color); } //调用 oCar.showColor(); 我们很容易使用oCar对象,但是我们创就是想创建多个Car实例。我们可以使用一个函数来封装上面的代码来实现: //定义 functioncreateCar(){
3、 varoCar=newObject(); oCar.color="red"; oCar.doors=4; oCar.showColor=function(){ alert(this.color); } returnoCar; } //调用 varocar1=createCar(); varocar2=createCar(); ocar1.color="black"; ocar1.showColor(); ocar2.showColor();
4、ipt> 顺便说一下,javaScript对象默认成员属性都是public的。这种方式我们称为工厂方式,我们创造了能创建并返回特定类型的对象的工厂。 这样做有点意思了,但是在面向对象中我们经常使用创建对象的方法是:Carcar=newCar(); 使用new关键字已经深入人心,因此我们使用上面的方法去定义总感觉别扭,并且每次调用时都去创建新的属性以及函数,功能上也不实际。下来我们看看构造函数的形式定义类。2.构造函数这种方式看起来有点象工厂函数。具体表现如下: //定义 functio
5、nCar(color,doors){ this.color=color; this.doors=doors; this.showColor=function(){ alert(this.color); }; } //调用 varcar1=newCar("red",4); varcar2=newCar("blue",4); car1.showColor(); car2.showColor(); 看起来效果很明显,有差别了吧。感觉有点意思了。在构造函数内部
6、创造对象使用this关键字,使用new运算符创建对象感觉非常亲切。但是也有点问题:每次new对象时都会创建所有的属性,包括函数的创建,也就是说多个对象完全独立,我们定义类的目的就是为了共享方法以及数据,但是car1对象与car2对象都是各自独立的属性与函数,最起码我们应该共享方法。这就是原形方式的优势所在。3.原型方式利用对象的prototype属性,可把它看出创建新对象所依赖的原型。方法如下: //定义 functionCar(){ }; Car.prototype.color="red
7、"; Car.prototype.doors=4; Car.prototype.drivers=newArray("Tom","Jerry"); Car.prototype.showColor=function(){ alert(this.color); } //调用: varcar1=newCar(); varcar2=newCar(); car1.showColor(); car2.showColor(); alert(car1.drivers); car1.drivers.push("stephen")
8、; a
此文档下载收益归作者所有