Javascript对象定义的几种方式
来源:互联网 发布:ntmy双肩包淘宝 官网 编辑:程序博客网 时间:2024/04/19 13:59
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关键字实例化,具有和工厂方式相同的弊端,不推荐使用
0 0
- Javascript对象定义的几种方式
- Javascript笔记-定义对象的几种方式
- javascript定义类或对象的几种方式
- javascript 中定义类和对象的几种方式
- JavaScript JS中定义对象的几种方式
- JavaScript中定义对象的几种方式
- JavaScript定义类的几种方式
- javascript定义函数的几种方式
- JavaScript定义类的几种方式
- JavaScript定义类的几种方式
- JavaScript定义类的几种方式
- JavaScript定义类的几种方式
- Javascript定义函数的几种方式
- JavaScript定义类的几种方式
- javascript定义函数的几种方式
- JavaScript定义对象的几种方法
- JavaScript中对象的定义和继承的几种方式
- JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象)
- Bathy2010 3.5k 水箱装配图(1)----零件列表图
- 第九周实践——阅读程序(2)
- 阿里云ECS—访问
- Java常用排序算法之选择排序
- mapreduce采用多进程与spark采用多线程比较
- Javascript对象定义的几种方式
- hdu5672 string(尺取法)
- 编译原理之后缀表达式生成与计算(2)
- 经典算法——合并K个有序链表
- centos6.5上NFS服务器搭建
- 手机开发实战50——CALL介绍
- 第13周项目2:动物这样叫(1)
- Poj1745 Divisibility
- keras实现deepid:flatten中间层、merge多个层次、二维图像的处理、权重的保存与重用、Autoencoder