Javascript对象定义的几种方式

转载 2016年06月01日 21:36:35
Javascript对象定义的几种方式
一.工厂方式:先创建对象,再向对象添加方法和属性,封闭后调用不要使用new操作符创建对象。使用这种方法有很多弊端,把方法定义在工厂函数内部的时候,每次调用的时候都会产生新的函数
function factory(name,person,address,time){
    var tmp=new Object;
    tmp.name=name;
    tmp.person=person;
    tmp.address=address;
    tmp.workTime=function(){
        alert("we start to work at" + time);
    }
    return tmp;
}
var factory1=factory("drugs",100,"huashan Rd",10);
var factory2=factory("TCMdrugs",100,"hongqiao Rd",11);
factory1.workTime();
factory2.workTime();//Here,factory1 and factory2 have different method
对这种问题虽然可以用下面的方式改进,但是缺乏很好的封装性
function factory(name,person,address,time){
    var tmp=new Object;
    tmp.name=name;
    tmp.person=person;
    tmp.address=address;
    tmp.workTime=workTime();
    return tmp;
}
function workTime(){
    alert("we start to work at" + this.time);
}

二,构造函数方式,在构造函数内部不创建对象,使用this关键字,使用时候用new操作符,存在和工厂方式相同的问题,重复创建函数。
function counstruct(name,person,address,time){
    this.name=name;
    this.person=person;
    this.address=address;
    this.workTime=function(){
        alert("we start to work at" + this.time);
    };
}

三.原型方式:利用prototype属性来实现属性和方法,可以通过instanceof 检查对象类型,解决了重复创建函数的问题,但不能通过传递参数初始化属性
function Car(){
 
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.showColor = function(){
    alert(this.color);
};
var car1 = new Car();
var car2 = new Car();
但是如果遇到下面的情况,又出问题了
Car.prototype.drivers = new Array("mike", "sue");
car1.drivers.push("matt");
alert(car1.drivers);  //outputs "mike,sue,matt"
alert(car2.drivers);  //outputs "mike,sue,matt"
drivers是指向Array对象的指针,Car的两个实例都指向同一个数组。
四.混合的构造函数/原型方式:针对原型方式的解决方案
function Car(sColor, iDoors, iMpg){
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array("mike", "sue");
}
Car.prototype.showColor = function (){
    alert(this.color);
};
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
car1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);
五.动态原型方式:这种方式是极力推荐的方式,避免了前面几种方式所出现的问题,提供了更友好的编码风格
function Car(sColor, iDoors, iMpg){
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array("mike", "sue");
    
    if(typeof Car.initialized == "undefined"){
        Car.prototype.showColor = function (){
            alert(this.color);
        };
        Car.initialized = true;
    }
}
 
var car1 = new Car("red", 4, 23);
var car2 = new Car("blue", 3, 25);
 
car1.drivers.push("matt");
alert(car1.drivers);
alert(car2.drivers);

六.混合工厂方式:和工厂方式有些相似,但采用new关键字实例化,具有和工厂方式相同的弊端,不推荐使用

相关文章推荐

JavaScript中定义对象的几种方式

JavaScript中没有类的概念,只有对象。 在JavaScript中定义对象可以采用以下5种方式(附加改进方式): 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型(“p...

JavaScript 创建类/对象的几种方式 (经典)

JavaScript 创建类/对象的几种方式 Posted on 2009-03-17 09:37 LucasYang 阅读(3426)评论(2) 编辑 收藏 在JS中,创建对象(C...

JavaScript 创建类/对象的几种方式

在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的。 JS对象是一种复合类型,它允许你通...

JavaScript 创建类/对象的几种方式

鸣谢:http://www.cnblogs.com/lucas/archive/2009/03/17/1411656.html 扩展:http://www.cnblogs.com/lucas/arc...

Javascript笔记——对象的几种生成方式

javascript是一种灵活的语言,虽然不能严格的称之为面对对象,但是也有着某些面对对象的用法。其中生成对象有不少方法,看书总结了以下几种方法。   一,利用原生方法 1)利用new关键字构造...

JavaScript 创建对象的几种方式

object-created //1.factory pattern to create object, using this pattern we can not determ...

JavaScript创建对象几种方式

//利用函数来创建一个对象 function People(name){ this.name = name; this.printName = function(){ ...

JavaScript创建对象的几种方式

1.object的构造函数 创建自定义对象最简单的方式就是创建一个object的实例,然后为它添加属性和方法,早期JavaScript开发人员经常使用这个模式创建新对象。var person = ...
  • ktutu
  • ktutu
  • 2016-12-03 16:20
  • 107

JavaScript创建对象的几种方式

面向对象(Object-Oriented,OO)语言都有一个标志,那就是它们都具有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象。而我们知道,ECMAScript中没有类的概念,因此它的对...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)