js 创建类与对象有几种方式:
1、最原始的方式 :
var car = new Object(); car.color = "red"; car.name = "baoma"; car.showColor = function(){ alert(this.color); }
创建一个car 的对象, 有两个属性: name,color 一个方法:showColor
缺点:只能创建一个对象
2、工厂方式
function createCar() {
var car= new Object;
car.color = "blue";
car.name= "baoma";
car.showColor = function() {
alert(this.color);
};
return car;
}
var car1 = createCar();
var car2 = createCar();
和原始方式一样,创建car 对象
比原始方式优越的是:可以创建多个car对象
缺点:所有对象的属性和方法都 是相同的
3、构造函数方式
function createCar(color,name) { this.color = color; this.name= name; car.showColor = function() { alert(this.color); }; } var car1 = createCar("blue","baoma"); var car2 = createCar("red","benci");
缺点:
构造函数会重复生成函数,为每个对象创建独立的版本
4、原型方式:
function Car() { } Car.prototype.color = "blue"; Car.prototype.name = "baoma"; Car.prototype.showColor = function() { alert(this.color); };
代码:
首先:定义构造函数(Car),其中无任何代码
其次:利用 prototype 构造属性与函数
当调用new Car()时, 原型的所有属性都会被立即赋予创建的对象,也就是说有 Car 的实例存放的都是指向 showColor() 函数的指针 ,语义上讲:这样所有的属性都属于一个对象
原型方式存在问题:
1、不能使用传递参数方式给属性赋值
2、当属性的指向是对象 而不是函数时,对象很少被多个实例共享
5、混合构造函数/原型方式
function Car(color,name) { this.color = color; this.name= name; }; } Car.prototype.showColor = function() { alert(this.color); };
使用这种方式,基本与其它语言创建对象一个样了。
最常用的也是这种方式
这种方式 :既使所有函数都只创建一次,并且使每个对象都具有自己的对象属性实例
6、也可采用这种方式 动态原型方式
function Car(color,name) { this.color = color; this.name = name; if (typeof Car._initialized == "undefined") { Car.prototype.showColor = function() { alert(this.color); }; Car._initialized = true; } }
该方法使用标志(_initialized)来判断是否已给原型赋予了任何方法。该方法只创建并赋值一次
最常用,最好用的就是第 五,六种,但第六种更完美一些