铠姬 > Javascript对象创建

Javascript对象创建

简介


一、单一方式创建1、new形式var person=new Object();person.name=”Leo”;如果直接new完就了事,那没什么问题。如果new完还需要扩展属性,可以考虑使用工厂进行封装。工厂的使用下面有叙述。2、字面量形式var person={name:”Leo”};在构建函数参数,或者配置参数等场合中很是常见。3、工厂模式、寄生构造函数模式与稳妥构造函数模式function cratePerson(name,age){ var o=new Object; o.name=name; o.age=age; o.sayName=function(){alert(this.name)} return o;}var person=createPerson(“Leo”,18);/*此时创建了一个对象,这种方式叫工厂创建,或者稳妥构造函数模式。所谓稳妥构造函数模式就是不使用new和this创建对象*/var person2=new createPerson(“Leo”,18);//跟上面的效果一样,这样叫寄生构造//函数模式创建优点:封装了对象的创建过程,对具体的对象创建进行了隐藏,整个创建过程都在工厂之内,解除了对象创建的耦合,符合开放封闭原则。从而使对象的创建更加灵活,内部创建过程也很方便改进和扩展。而且可以定义私有变量。缺点:工厂模式没有解决对象的识别问题(即怎样知道一个对象的类型)。因为你创建的对象是Object的,而不会是person等其他类型。当然,这不是大问题,因为可以使用专用工厂进行创建。例如把var o=new Object换为var o=new Person();或者var o=new Person的子类();使用场合:此种模式常用于对现有对象进行扩展以及一些不能使用new跟this的安全环境中,例如我希望获取一个具有新值和新方法的数组对象,则可以这样:function MyArray(){ var values=new Array(); values.push(“Leo”); values.sayHi=function(){alert(“Hi”);}}var specialArray=new MyArray();于是就获取到了具备sayHi方法的特殊的数组对象了工厂方法典型应用:假设有Person类,Author与Writer类继承于Personfunction personFactory(condition){ switch conditioncase1:return new Author;break;case2:return new Writer;break;}4、构造函数模式function Person(name,age){ this.name=name; this.age=age; this.sayName=function(){alert(this.name)}}var person1=new Person(“Leo”,18);这里new Person(“Leo”,18),其实就是调用Person函数。不过调用new比较特殊,它会使Person的this等于等号左边的person1。所以这里new Person其实就相当于调用function Person(name,age){person1.name=name; person1.age=age; person1.sayName=function(){alert(this.name)}}于是person1就有了name,age和sayName属性。再废话一句,构造函数跟一般函数,其实没什么不同,这取决于你怎么去使用这个函数。如果你用new去调用,那这函数就可以视为构造函数,如:new Person();如果直接调用,那么就是普通函数,如:Person()。不同的是,new会使构造函数里面的this指向等号左边的对象。优点:解决了前面工厂模式未解决的对象识别问题。并且无法定义私有变量缺点:所有对象都会单独持有自己的属性。例如sayName函数,所有new Person创建出来的对象都会有这个属性。而实际上,sayName是没必要重复被创建的,应当所有对象共享一个sayName5、原型创建function Person(){}Person.prototype.name=”Leo”;Person.prototype.sayName=function(){console.log(this.name);}var p1=new Person();p1.sayName();//输出Leovar p2=new Person();p2.name=”Linda”p2.sayName();//输出Lindap1.sayName();//也是输出Linda优点:弥补了构造函数重复创建sayName函数的缺点,但仍然无法定义私有变量缺点:原型的优点是由于共享,而其缺点也正是由于共享。共享函数通常是正确的,但是如果共享属性则会出问题。所以如果类有除了函数之外的其他属性的话,建议不要单独使用原型创建二、组合方式创建1、构造函数和原型方式组合示例如下:function Person(){ this.name=”Leo”; }Person.prototype.sayName=function(){console.log(this.name;)}var p=new Person();p.sayName();//打出Leo,如果把this.name改为var name则这里会打出空字符,//也就是说,无法定义私有变量优点:结合了构造函数跟原型创建两种方式之所长缺点:仍然无法定义私有变量2、完美的动态原型模式示例:function Person(){var name="Leo";if(typeof this.getName != "function"){/*这里只判断一个getName就可以知道Person的prototype是否有初始化了,如果已经初始化就没必要往下执行,如果没有初始化就需要往下执行将prototype初始化*/Person.prototype.getName=function(){console.log(name);};Person.prototype.setName=function(n){ name=n;}} }这个动态原型基本可以说非常完美了。既有构造函数和原型的优势,该共享的属性共享,不该共享的属性不共享,同时还可以定义私有变量。不过这里仍然有一个小小的遗憾,如果在其他对象里面调用Person,Person还是会对其原型再初始化一次,例如直接调用,也就是在window调用,即直接Person(),当然这种情况通常是误用此构造函数的情况。不过还是可以对这种情况进行改进。只需要对Person构造函数加一个判断,再为Person增加一个静态工厂即可。完整示例代码如下:function Person(){var name="Leo";if(this.constructor!=Person) throw new Error("只能通过Person的getInstance方法调用此构造函数");if(typeof this.getName != "function"){Person.prototype.getName=function(){console.log(name);};Person.prototype.setName=function(n){ name=n;}} }Person.getInstance=function(){return new Person();}//此时只能通过getInstance方//法获取到Person的对象实例,至此,问题完美解决

点击显示全文

  • 中国功夫怎么打

    首先想练好必须实战,自己单练闭门造车是不行的,散打也是中国功夫是融合传统武术的一种形式讲解的就是实战,对战中你才能晓得自己哪里不足去改变。各种...

    发布时间:2018-06-24 12:58:18
    157493
  • 功夫之王_功夫战士游戏攻略_11种敌人和BOSS属性

    《功夫之王》是一款动作冒险类游戏,在这款游戏中,玩家扮演的将是一个类似于李小龙这样的功夫高手。英雄的故事开始在一个小小宁静的...

    发布时间:2018-06-24 12:57:04
    785264
  • 怎么泡功夫茶

    很多人都听过功夫茶,但是也有很多人误解了功夫茶,有人将茶楼的拿着长嘴茶壶的倒茶方法误以为是功夫茶,其实不然...

    发布时间:2018-06-24 13:26:57
    368122
  • 浙江杭州旅游景点

    接下来游览“一统天下的王者之气”——秦王宫景区(门票160元)。是著名影片《英雄》、《无极》、《汉武大帝》、《功夫之王》的拍摄地。体验惊险刺激...

    发布时间:2018-06-24 13:18:26
    410339
  • 《功夫之王》敌方兵种及主角技能指南

     在开始漫长的《功夫之王》之旅前,我们先来了解下游戏的背景。宁静的大山深处,有个远离喧嚣的小村庄,这里住着一位隐士和他的徒弟,每日都在山谷中苦...

    发布时间:2018-06-24 13:20:14
    349095
  • 功夫少林擂台攻略

    功夫少林,是一款很好玩的手机游戏,深受广大玩家爱的喜爱。小编今天教你们功夫少林擂台攻略,让你成为游戏大神。功夫少林游戏软件手...

    发布时间:2018-06-24 13:05:16
    139967
  • 演过好莱坞电影的十大中国艺人

    9、李冰冰参演的好莱坞电影:《生化危机5:惩罚》、《变形金刚4》、《功夫之王》等李冰冰是勇闯好莱坞的急先锋。她参与了多部高口碑、高票房好莱坞大...

    发布时间:2018-06-24 13:22:35
    765753
  • 功夫派冰封王殿任务攻略

    功夫派冰封王殿咳咳,又有剧情任务了,打开功夫快报,可以直接到瑶瑶这里接取任务~到武圣大殿找到飞天猫瑶瑶接取任务~别看任务目标...

    发布时间:2018-06-24 13:34:02
    242915
加载中...
加载中...
  • 怎么泡功夫茶

    很多人都听过功夫茶,但是也有很多人误解了功夫茶,有人将茶楼的拿着长嘴茶壶的倒茶方法误以为是功夫茶,其实不然...

  • 功夫少林擂台攻略

    功夫少林,是一款很好玩的手机游戏,深受广大玩家爱的喜爱。小编今天教你们功夫少林擂台攻略,让你成为游戏大神。功夫少林游戏软件手...

  • 功夫之王_功夫战士游戏攻略_11种敌人和BOSS属性

    《功夫之王》是一款动作冒险类游戏,在这款游戏中,玩家扮演的将是一个类似于李小龙这样的功夫高手。英雄的故事开始在一个小小宁静的...

  • 功夫西游(游戏介绍)

    一款以西游为背景的横版格斗手游,玩起来还有点意思,这里和大家一起分享一下智能手机安卓/IOS游戏刚不删档内测只开放了三个角色.肉盾型的战士-天杀 法师型的-蛇精...

  • 功夫之王角色创建

    《功夫之王》(KungFu Man)是一款回合制格斗网页游戏,由上海网务网络信息有限公司根据中国功夫文化自主开发而成。游戏是...

今日热点信息
  • 虚幻争霸怎么下载

    虚幻争霸如何下载?虚幻争霸国服开启测试后要去哪里下载?虚幻争霸是由tx代理的3D虚幻引擎MOBA网游,游戏...

    发布时间:2018-06-24 13:20:20
    174326
  • 七雄争霸加战攻略

    七雄争霸作为一款腾讯公司自主研发的精品页游,从运营至今一直受到广大游戏爱好者的青睐和重视。许多刚开始接触七雄的新手都不知道该怎么玩,怎么玩好。...

    发布时间:2018-06-24 13:23:28
    395707
  • 争霸艾泽拉斯rpg攻略

    争霸艾泽拉斯rpg攻略争霸艾泽拉斯是魔兽争霸游戏的一款经典RPG地图,很多人都喜欢这个地图。今天给大家分享...

    发布时间:2018-06-24 13:18:36
    670562
  • 七雄争霸升级要点攻略

    七雄争霸是一款休闲娱乐的网页游戏。需要不断的升级才能更好的体会游戏的奥妙。小编在此给大家提供一些升级经验,仅供参考。电脑点击“登录信息”,打开...

    发布时间:2018-06-24 13:38:03
    295800
  • 七雄争霸武将如何改名

    七雄争霸是大家非常喜欢玩的网页游戏,我们在里面获得的武将,可以给其改名,改成喜欢的名字。下面就来告诉大家,七雄争霸武将如何改...

    发布时间:2018-06-24 13:45:53
    216640
  • 七雄争霸如何升级建筑

    七雄争霸是一款非常不错的网页游戏,属于战争类型的游戏,我们可以对里面的建筑进行升级,下面小编就教大家如何操作。首先我们登陆七雄争霸游戏,进入到...

    发布时间:2018-06-24 13:18:38
    427948
精彩推荐
  • 《明朝传奇》英雄副本攻略《明朝传奇》英雄副本攻略

    富贵险中求 《明朝传奇》英雄副本里宝藏遍地《明朝传奇》中英雄副本是最具有活力PK教学意义和突显个人战斗特色的一个最重要的副本...发布时间:2018-06-24 13:13:55259720

  • 明朝是怎么灭亡的明朝是怎么灭亡的

    明朝是继元朝以后的又一大朝,历经十二世、十六位皇帝,国祚276年。那么如此庞大的王朝到底是如何覆灭的呢?本期小编简单阐述一下历史原因元末的时候...发布时间:2018-06-24 13:24:11385103

  • 明朝时代常忽略的银两秘诀明朝时代常忽略的银两秘诀

    银两的主要来源有做主线或支线任务,做刺探任务,参加国战。这里小鸟们就不懂了,老鸟都懂,是的,弄小号刷银两,刺探任务是每天都有的,所以刺探任务是最好刷银两的途径,...发布时间:2018-06-24 13:43:52639790

  • 欧陆风云3明朝攻略欧陆风云3明朝攻略

    注意一点!千万不要触发“天命丧失”(lose the mandate)事件,如果不幸触发了,那我只能很遗憾的告诉你,这事情无解! 因为这个游戏里的大明朝...发布时间:2018-06-24 13:20:46738894

  • 明朝时代将领统帅与属性明朝时代将领统帅与属性

    明朝时代里面将领是每个玩家都非常关注的问题,大家经常在讨论统帅是最重要的属性,其次才是属性,曾经自己在计算器中加入了综合属性的计算,直接用统帅...发布时间:2018-06-24 12:59:50280832

  • 明朝时代慧眼识英雄—将领选择明朝时代慧眼识英雄—将领选择

    在明朝时代中,你是一个元帅,你的的战斗力主要是取决于所带领的将领,所以将领的好坏直接影响到你的战斗力。那么怎样的将领才算是好的呢?将领的好坏只...发布时间:2018-06-24 13:02:13291804

  • 明朝时代升级狂飙之六部曲明朝时代升级狂飙之六部曲

    明朝时代商贸就是在各城市间通过低买高卖赚取差价的活动。商贸活动可以充实国库,要使国库储备快速增长则要全国玩家同心协力,获取最高利润。当国库充盈...发布时间:2018-06-24 13:01:24967004

  • 《明朝时代》菜鸟到达人的华丽转身《明朝时代》菜鸟到达人的华丽转身

    这些,不禁让我沉思良久,在《明朝时代》里畅游,多少人还是个菜鸟,不会征兵,不懂选将,不知道内政是怎么回事?不知道经验药有何作用……太多的幼稚与...发布时间:2018-06-24 13:20:16344138

手机版 | 欢迎来到铠姬
RSS订阅