用Javascript定义类或对象的五种方法的摘要
可以创建和返回特定类型对象的工厂函数(工厂函数)。
功能createcar(scolor){
无功otempcar =新的对象;
otempcar.color = scolor;
otempcar.showcolor =函数(){
警戒(这个颜色);
};
返回otempcar;
}
无功ocar1 = createcar();
无功ocar2 = createcar();
当这个函数被调用时,会创建一个新的对象和所有必要的属性给出。使用这种方法,汽车的对象的两个版本(ocar1和ocar2)将被创建,其性质是完全一样的。
使用这种方法的问题:
1似乎不象使用构造函数的new操作符那样正式。
2创建一个对象必须以这种方式创建的方法。每次你打电话给createcar(),你创建显示颜色对话框(),这意味着每个对象都有自己的版本显示颜色对话框()。事实上,每个对象共享相同的函数。
一些开发人员定义了工厂功能之外的对象的方法,然后通过属性指向方法,以避免这个问题:
功能createcar(scolor){
无功otempcar =新的对象;
otempcar.color = scolor;
otempcar.showcolor =显示颜色对话框;
返回otempcar;
}
功能显示颜色对话框(){
警戒(这个颜色);
}
在重写代码,功能是显示颜色对话框()函数前createcar定义(),并在createcar(),该对象赋值给指针已经指向现有的显示颜色对话框()函数。在功能上,这解决了重复创建对象的问题,但功能不看起来像一个对象的方法。
所有这些问题都导致了开发人员定义的构造函数的出现。
第二种方法:构造函数方法
功能车(scolor){
this.color = scolor;
this.showcolor =函数(){
警戒(这个颜色);
};
}
无功ocar1 =新车(红色);
无功ocar2 =新车(蓝色);
你可能已经注意到的第一个差异,不能创建对象的构造函数,但使用此关键字,当构造函数是用new操作符调用,对象是之前创建的第一行代码被执行,并且只有这可以用来访问对象,那么这个属性可以直接给出,默认构造函数的返回值(没有返回算子的显式使用)。
这样,与工厂法一样,管理职能也存在同样的问题。
第三种方式:原型
函数汽车(){
}
car.prototype.color =蓝色;
无功ocar1 =新车();
无功ocar2 =新车();
呼唤新汽车时,(),原型的所有属性都是立即分配给对象被创建,这意味着所有的汽车实例的指针显示颜色对话框()函数,在语义上,它似乎是一个对象,因此解决了这两个问题在前两种方式存在。此外,使用这种方法,你也可以使用instanceof检查对象由一个给定的变量的类型。因此,下面的代码将输出真:
警报(OCAR是汽车); / /输出真
它看起来很好,可惜它没有它那么好。
1首先,这个构造函数没有参数。当原型使用,构造函数可以不通过参数初始化属性值的构造函数,因为CAR1和小车性能均等于red
2真正的问题发生在属性指向对象而不是函数时。函数共享不会引起任何问题,但是对象很少被多个实例共享。
第四种方法:混合构造函数/原型(推荐)
构造函数和原型的联合使用可以创建像其他编程语言一样的对象,这个概念非常简单,即使用构造函数定义对象的所有非功能属性,并以原型的方式定义对象的函数属性。
功能车(scolor){
this.color = scolor;
this.drivers =新的数组(迈克
}
car.prototype.showcolor =函数(){
警戒(这个颜色);
}
无功ocar1 =新车(红色);
无功ocar2 =新车(蓝色);
ocar1.drivers.push(马特);
警报(ocar1。司机); / /输出迈克,苏,马特
警报(ocar1。司机); / /输出迈克苏
第五种方式:动态原型(推荐)
开发者使用其他语言,感觉不太和谐的使用一个混合的构造函数/原型。人批评混合构造函数/原型的方法,认为这是不合理的找到一个方法在构造函数通过寻找一个构造函数属性。所以设计了动态原型提供更友好的编码风格。
动态原型方法的基本思想是混合构造函数/原型的方式,那都是一样的,在构造函数的非功能属性的定义和功能属性是由原型属性定义的。唯一的区别就是给对象方法的位置。以下是用重写动态原型方法的汽车类:
功能车(scolor){
this.color = scolor;
this.drivers =新的数组(迈克
如果(typeof的车。_initialized = = undefined){
car.prototype.showcolor =函数(){
警戒(这个颜色);
}
}
_initialized =真车;
}
上述五种方式在Javascript中定义类或对象是共享的全部内容,小编的,希望能给大家一个参考,希望你能支持它。