Javascript对象定义的几种方式

2016-02-19 21:25 8 1 收藏

下面图老师小编跟大家分享Javascript对象定义的几种方式,一起来学习下过程究竟如何进行吧!喜欢就赶紧收藏起来哦~

【 tulaoshi.com - Web开发 】

  一.工厂方式:先创建对象,再向对象添加方法和属性,封闭后调用不要使用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

  对这种问题虽然可以用下面的方式改进,但是缺乏很好的封装性

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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的两个实例都指向同一个数组。

  四.混合的构造函数/原型方式:针对原型方式的解决方案

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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关键字实例化,具有和工厂方式相同的弊端,不推荐使用

来源:http://www.tulaoshi.com/n/20160219/1626099.html

延伸阅读
标签: Web开发
作者:excelence转贴 整理日期:2004年6月15日 本文不只是关于JavaScript的,它是关于Notes/Domino中的JavaScript的! 虽然如是说,不过还是值得一看! 希望你有所收获! 亲密接触单选按钮、复选框和JavaScript的一些有趣的事情  我将以对象模型和一些常用对象开始,因为JavaScript里的一切都是从对象展开的。记住,本文不只...
标签: Web开发
JavaScript中的Function对象是函数,函数的用途分为3类: 作为普通逻辑代码容器; 作为对象方法; 作为构造函数。 1.作为普通逻辑代码容器 function multiply(x, y){ return x*y; } 函数multiply封装了两位数的乘法运算公式: var product = multiply(128,128); // product = 16384 创建函数实例的方式有3种。第一种是声明式,即像声...
标签: Web开发
javascript时间对象 时间对象是JS的内置对象,使用前必须申明,包含日期和时间两类. DATE对象提供三种方法: 1.从系统中获取当前的时间和日期; 2.设置当时的时间和日期; 3.时间,日期转换成其它格式. setYear 设置当前年份 setMonth 设置当前月份 setDate 设置当前日期 setDay  设置当前对象的星期数 setHours 设置当前的小时 setMinutes ...
标签: Web开发
一个对象要真正地被使用,可采用以下几种方式获得: 引用JavaScript内部对象; 由浏览器环境中提供; 创建新对象。 这就是说一个对象在被引用之前,这个对象必须存在,否则引用将毫无意义,而出现错误信息。从上面中我们可以看出JavaScript引用对象可通过三种方式获取。要么创建新的对象,要么利用现存的对象。
标签: Web开发
上一篇写的废话太多,写得很烂,这一次讲讲继承吧,我们上一节知道了prototype,现在我从prototype下手来实现方法 scrīpt LANGUAGE="Javascrīpt" !-- function 职业(){  var 须知="每天要好好上班"; } 职业.prototype.上班=function(name){  return name+"上班"; } 职业.prototype.下班=function(){ ...

经验教程

862

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部