首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js 创造类与对象

2012-10-07 
js 创建类与对象js 创建类与对象有几种方式:??1、最原始的方式 :var car new Object()car.color red

js 创建类与对象

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)来判断是否已给原型赋予了任何方法。该方法只创建并赋值一次

?

?

最常用,最好用的就是第 五,六种,但第六种更完美一些

?

热点排行