javascript
JS 创建对象(常见的几种方法)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
參考 :?http://www.jb51.net/article/16366.htm
?//1.工廠模式
function?createPerson(name,?age,?job)?{var?o?=?{};o.name?=?name;o.age?=?age;o.job?=?job;o.sayName?=?function()?{alert(this.name);};return?o; } var?tanya?=?new?Person("tanya",?"30",?"female"); var?ansel?=?new?Person("ansel",?"30",?"male"); tanya.sayName(); ansel.sayName();? ? ? ?
/*
*2.構(gòu)造函數(shù)方法
*因為this就表示當(dāng)前運(yùn)行時的對象,將構(gòu)造函數(shù)this的作用域指向新對象,
*將當(dāng)前運(yùn)行對象的屬性和方法都賦給新對象,這樣對象模式稱為構(gòu)造函數(shù)模式?
*/
function?Person(name,?age,?job)?{this.name?=?name;this.age?=?age;this.job?=?job;this.sayName?=?function()?{alert(this.name);}; } var?tanya?=?new?Person("tanya",?"30",?"female"); var?ansel?=?new?Person("ansel",?"30",?"male"); tanya.sayName(); ansel.sayName();
//3.原型鏈
//原型模式就要考慮原型鏈了,分析一下,sayName方法在實例中被重復(fù)定義了兩次,
//但其實沒有必要創(chuàng)造兩個一樣的副本。
//使用原型方法,可以使得tanya和ansel的共享一個sayName方法。?
?function?Person(name,?age,?job)?{this.name?=?name;this.age?=?age;this.job?=?job; } Person.prototype.sayName?=?function()?{alert(this.name); }; var?tanya?=?new?Person("tanya",?"30",?"female"); var?ansel?=?new?Person("ansel",?"30",?"male"); tanya.sayName(); ansel.sayName();
/*4. 實際應(yīng)用時,不是一成不變的套用某種模式,活學(xué)活用。
1)需要共享方法的時候就用原型模式,?
2)需要使用副本的時候就用構(gòu)造模式,
3)還可以結(jié)合起來,把所有信息都封裝在構(gòu)造函數(shù)中,而通過在構(gòu)造函數(shù)中初始化原型,
使得對象保持了同時使用構(gòu)造函數(shù)和原型的優(yōu)點(diǎn)。 ?*/
function?Person(name,?age,?job)?{this.name?=?name;this.age?=?age;this.job?=?job;if?(typeof?sayName?!=?"function")?{Person.prototype.sayName?=?function()?{alert(this.name);};} } var?tanya?=?new?Person("tanya",?"30",?"female"); var?ansel?=?new?Person("ansel",?"30",?"male"); ansel.sayName?=?function()?{alert("Hi?ansel,?how?hansome?you?are!"); } tanya.sayName(); ansel.sayName(); tanya.sayName();轉(zhuǎn)載于:https://my.oschina.net/kelvinline/blog/336938
總結(jié)
以上是生活随笔為你收集整理的JS 创建对象(常见的几种方法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 嵌入式相关软件说明
- 下一篇: Brute Force STL ---