Javascript 创建对象方法的总结
1. 使用Object構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)對(duì)象,下面代碼創(chuàng)建了一個(gè)person對(duì)象,并用兩種方式打印出了Name的屬性值。
????var?person?=?new?Object();person.name="kevin";person.age=31;alert(person.name);alert(person["name"])2. 使用對(duì)象字面量創(chuàng)建一個(gè)對(duì)象;不要奇怪person["5"],這里是合法的;另外使用這種加括號(hào)的方式字段之間是可以有空格的如person["my age"].
????var?person?=?{name:"Kevin",age:31,????????5:"Test"};alert(person.name);????alert(person["5"]);3. 使用工廠模式創(chuàng)建對(duì)象,返回帶有屬性和方法的person對(duì)象。
function?createPerson(name,?age,job) {????var?o?=?new?Object();o.name=name;o.age=31;o.sayName=function(){alert(this.name);};????return?o; } createPerson("kevin",31,"se").sayName();4. 使用自定義構(gòu)造函數(shù)模式創(chuàng)建對(duì)象;這里注意命名規(guī)范,作為構(gòu)造函數(shù)的函數(shù)首字母要大寫(xiě),以區(qū)別其它函數(shù)。這種方式有個(gè)缺陷是sayName這個(gè)方法,它的每個(gè)實(shí)例都是指向不同的函數(shù)實(shí)例,而不是同一個(gè)。
function?Person(name,age,job) {????this.name=name;????this.age=age;????this.job=job;????this.sayName=function(){alert(this.name);}; }var?person?=?new?Person("kevin",31,"SE"); person.sayName();5. 使用原型模式創(chuàng)建對(duì)象;解決了方法4中提到的缺陷,使不同的對(duì)象的函數(shù)(如sayFriends)指向了同一個(gè)函數(shù)。但它本身也有缺陷,就是實(shí)例共享了引用類型friends,從下面的代碼執(zhí)行結(jié)果可以看到,兩個(gè)實(shí)例的friends的值是一樣的,這可能不是我們所期望的。
function?Person() {}Person.prototype?=?{constructor?:?Person,name:"kevin",age:31,job:"SE",friends:["Jams","Martin"],sayFriends:function(){alert(this.friends);} };var?person1?=?new?Person(); person1.friends.push("Joe"); person1.sayFriends();//Jams,Martin,Joe ?person2?=6. 組合使用原型模式和構(gòu)造函數(shù)創(chuàng)建對(duì)象,解決了方法5中提到的缺陷,而且這也是使用最廣泛、認(rèn)同度最高的創(chuàng)建對(duì)象的方法。
.name=.age=.job==?person1?=??Person("kevin",31,"SE"?7. 動(dòng)態(tài)原型模式;這個(gè)模式的好處在于看起來(lái)更像傳統(tǒng)的面向?qū)ο缶幊?#xff0c;具有更好的封裝性,因?yàn)樵跇?gòu)造函數(shù)里完成了對(duì)原型創(chuàng)建。這也是一個(gè)推薦的創(chuàng)建對(duì)象的方法。
function?Person(name,age,job) {????//屬性this.name=name;????this.age=age;????this.job=job;????this.friends=["Jams","Martin"];????//方法if(typeof?this.sayName?!="function"){Person.prototype.sayName=function(){alert(this.name);};Person.prototype.sayFriends=function(){alert(this.friends);};} }var?person?=?new?Person("kevin",31,"SE"); person.sayName(); person.sayFriends();另外還有兩個(gè)創(chuàng)建對(duì)象的方法,寄生構(gòu)造函數(shù)模式和穩(wěn)妥構(gòu)造函數(shù)模式。由于這兩個(gè)函數(shù)不是特別常用,這里就不給出具體代碼了。
寫(xiě)了這么多創(chuàng)建對(duì)象的方法,其實(shí)真正推薦用的也就是方法6和方法7。當(dāng)然在真正開(kāi)發(fā)中要根據(jù)實(shí)際需要進(jìn)行選擇,也許創(chuàng)建的對(duì)象根本不需要方法,也就沒(méi)必要一定要選擇它們了。
本文轉(zhuǎn)自 風(fēng)雨蕭條 51CTO博客,原文鏈接:http://blog.51cto.com/1095221645/1865185,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的Javascript 创建对象方法的总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Docker与OpenStack集成实战
- 下一篇: 14 Java NIO vs IO-翻译