5.较好的自定义类的方式
前面已经介绍了如何定义一个类,如何初始化一个类的实例,且类可以在function定义的函数体中添加成员,又可以用prototype定义类的成员,编程的代码显得混乱。
如何以一种清晰的方式来定义类呢?下面给出了一种类的实现模式。
在JavaScript中,由于对象灵活的性质,在构造函数中也可以为类添加成员,在增加灵活性的同时,也增加了代码的复杂度。
为了提高代码的可读性和开发效率,可以采用这种定义成员的方式,而使用prototype对象来替代,这样function的定义就是类的构造函数,符合传统意义类的实现:类名和构造函数名是相同的。
例如:
cls.prototype,不仅代码体积变大,而且易读性还不够。为了进一步改进,可以使用无类型对象的构造方法来指定prototype对象,从而实现类的成员定义:
function cls(){
//构造函数
}
//成员定义
cls.prototype.someProperty=”sample”;
cls.prototype.someMethod=function(){ //方法实现代码 }
//构造函数
}
//成员定义
cls.prototype.someProperty=”sample”;
cls.prototype.someMethod=function(){ //方法实现代码 }
虽然上面的代码对于类的定义已经清晰了很多,但每定义一个属性或方法,都需要使用一次
cls,构造函数直接用类名来实现,而成员使用无类型对象来定义,以列表的方式实现了所有属性和方法,并且可以在定义的同时初始化属性的值。这也更象传统意义面向对象语言中类的实现。只是构造函数和类的成员定义被分为了两个部分,这可看成JavaScript中定义类的一种固定模式,这样在使用时会更加容易理解。
//定义一个类cls
function cls(){ //构造函数 }
//通过指定prototype对象来实现类的成员定义
class1.prototype={ someProperty:”sample”, someMethod:function(){ //方法代码 },
…//其他属性和方法.
}
function cls(){ //构造函数 }
//通过指定prototype对象来实现类的成员定义
class1.prototype={ someProperty:”sample”, someMethod:function(){ //方法代码 },
…//其他属性和方法.
}
上面的代码用一种很清晰的方式定义了
注意:在一个类的成员之间互相引用,必须通过this指针来进行,例如在上面例子中的someMethod方法中,如果要使用属性someProperty,必须通过this.someProperty的形式,因为在JavaScript中每个属性和方法都是独立的,它们通过this指针联系在一个对象上。
Read: 881