用Javascript定义类的方法
1。工厂模式
复制代码代码如下所示:
函数汽车(){
无功控=新的对象;
ocar.color =蓝色;
ocar.doors = 4;
ocar.showcolor =函数(){
document.write(这个颜色)
};
返回控;
}
VaR CAR1 =车();
VaR的车=车();
当你调用这个函数时,你创建一个新的对象并赋予它所有的属性和方法。使用这个函数,你可以创建2个具有相同属性的对象。当然,我的姐姐可以通过将参数传递给它来改变它。
复制代码代码如下所示:
功能车(颜色,门){
无功控=新的对象;
ocar.color =颜色;
ocar.doors =门;
ocar.showcolor =函数(){
document.write(这个颜色)
};
返回控;
}
VaR CAR1 =车(红
VaR的车=车(蓝
car1.showcolor() / /输出:红
car2.showcolor() / /输出:蓝色
现在可以通过向函数传递不同的参数来获得具有不同值的对象。
在前面的例子中,每次调用函数的车()是创建显示颜色对话框(),这意味着每个对象都有它自己的显示颜色对话框()方法。
但实际上,每个对象都有相同的功能。
虽然方法可以在函数之外定义,但是方法是由函数的属性来指示的。
复制代码代码如下所示:
功能显示颜色对话框(){
警戒(这个颜色);
}
函数汽车(){
无功控=新的对象();
ocar.color =颜色;
ocar.doors =门;
ocar.showcolor =显示颜色对话框;
返回控;
}
但它看起来不像一个函数方法。
2、构造函数方法
构造函数与工厂方法一样简单,如下所示:
复制代码代码如下所示:
功能车(颜色、门)
您可以看到构造函数不使用这个关键字在函数中创建对象,因为在调用构造函数时创建对象,而对象属性只能在函数中使用。
现在要创建具有新对象的对象,它看起来是这样的,但它与工厂的方法相同。
3、原型模式
该方法利用了对象的原型属性,首先用空函数创建类名,所有属性和方法都给出了原型属性。
复制代码代码如下所示:
功能车()
在这个代码中,首先定义一个空函数,对象的属性由原型属性定义,当调用函数时,原型的所有属性将立即分配给要创建的对象。该函数的所有对象都是指针显示颜色对话框()。它们在语法上都属于同一个对象。
但是,这个函数没有参数,不能通过传递参数初始化属性,并且在创建对象后必须更改属性的默认值。
原型设计的一个严重问题是当属性指向对象,比如数组。
复制代码代码如下所示:
函数汽车(){
}
car.prototype.color =红色;
car.prototype.doors = 4;
car.prototype.arr =新的数组(
car.prototype.showcolor =函数(){
警戒(这个颜色);
}
VaR CAR1 =新车();
VaR的车=新车();
car1.arr.push(CC);
警报(CAR1。ARR); / /输出:AA、BB、CC
警报(CAR2,ARR); / /输出:AA、BB、CC
由于阵列的参考价值,对同一系列的车点的两个对象,所以当值添加到CAR1,也是在车看到。
联合使用构造函数/原型来创建对象以及其他编程语言。它是一种通过构造函数定义对象非功能属性的原型定义对象的方法。
复制代码代码如下所示:
功能车(颜色,门){
this.color =颜色;
this.doors =门;
this.arr =新的阵列(AA
}
Car.prototype.showColor(){
警戒(这个颜色);
}
VaR CAR1 =新车(红
VaR的车=新车(蓝
car1.arr.push(CC);
警报(CAR1。ARR); / /输出:AA、BB、CC
警报(CAR2,ARR); / /输出:AA、BB
4。动态原型
动态原型类似于混合构造函数/原型方法,唯一的区别是给出对象方法的位置。
复制代码代码如下所示:
功能车(颜色,门){
this.color =颜色;
this.doors =门;
this.arr =新的阵列(AA
如果(typeof的车。_initialized = = undefined){
car.prototype.showcolor =函数(){
警戒(这个颜色);
};
_initialized =真车;
}
}
动态原型使用一个标志来确定原型是否被赋予了一个方法,这确保了该方法只创建一次。
6。混合工厂模式
它的目的地创建一个false构造函数,只返回另一个对象的新实例。
复制代码代码如下所示:
函数汽车(){
无功控=新的对象();
ocar.color =红色;
ocar.doors = 4;
ocar.showcolor =函数(){
警戒(这个颜色)
};
返回控;
}
与工厂方法不同,新操作符是用这种方式使用的。
PS(个人理解):
1)原型定义的类成员(方法或属性)是每个类的公共对象。一般来说,没有定义成员属性。对象修改属性值并修改所有对象。
2)类具有原型属性,类对象不是;
3)每一个新的类对象或直接调用类(以下工厂方法形式)将执行定义类(函数)的语句一次(单例模式可以避免这种情况)。
4)类是函数类型,类对象是对象类型,只有函数类型是原型属性;
5)由原型定义的方法不能访问类(类定义的局部变量)的私有变量,但是通过它可以访问类成员属性和成员方法(定义的变量和方法)。
6)定义类的方法:
工厂模式(对象)
b.继承模式(原型)
C.构造函数模式(这个)
D.混合法
7){为什么由原型定义的属性可以被任何对象改变构造函数方法定义的属性只属于对象,不影响其他对象的属性值。
以上是对象方法的所有发明,目前最广泛使用的是混合构造函数/原型模式。此外,动态原型技术也很流行,它的功能相当于构造函数/原型模式。