創(chuàng)建對象

《JavaScript高級程序設計》中“創(chuàng)建對象”的的歸納,只為方便對比而已

一、工廠模式

function createPerson(name, age, job) {
    var o = new Object()
    o.name = name
    o.age = age
    o.job = job
    o.sayName = function() {
        alert(this.name)
    }
    return o
}

var person1 = createPerson("Nicholas", 29, "Software Engineer")
var person2 = createPerson("Greg", 27, "Doctor")

優(yōu)點:解決了創(chuàng)建多個相似對象的問題
缺點:無法解決對象識別問題


二、構造函數(shù)模式

function Person(name, age, job) {
    this.name = name
    this.age = age
    this.job = job
    this.sayName = function() {
        alert(this.name)
    }
}

var person1 = new Person("Nicholas", 29, "Software Engineer")
var person2 = new Person("Greg", 27, "Doctor")
// 當作構造函數(shù)使用
var person = new Person("Greg", 27, "Doctor")
person.sayName()    // Greg

// 當作普通函數(shù)調用
Person("Greg", 27, "Doctor")
window.sayName()    // Greg

// 在另一個對象的作用域中調用
var o = new Object()
Person.call(o, "Kristen", 25, "Nurse")
o.sayName() // Kristen

優(yōu)點:創(chuàng)建自定義的構造函數(shù)意味著將來可以將它的實例標識為一種特定的類型
缺點:每個方法都要在每個實例上重新創(chuàng)建一遍


三、原型模式

function Person = {}
Person.prototype.name = "Nicholas"
Person.prototype.age = 29
Person.prototype.job ="Software Engineer"
Person.prototype.sayName = function() {
    alert(this.name)
}
var person1 = new Person()
person1.sayName()   // Nicholas
var person2 = new Person()
person2.sayName()   // Nicholas

alert(person1.sayName == person2.sayName)   // true

優(yōu)點:讓所有對象實例共享它所包含的屬性和方法


四挣菲、組合使用構造函數(shù)模式和原型模式

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.friends = ["Shelby", "Court"]
}
Person.prototype = {
    constructor: Person,
    sayName: function() {
        alert(this.name);
    }
}

PS:使用最廣泛、認同度最高的一種創(chuàng)建自定義類型的方法掷邦“渍停可以說這是用來定義類型引用的一種默認模式。


五抚岗、動態(tài)原型模式

通過檢查某個應該存在的方法是否有效或杠,來決定是否需要初始化原型。

function Person(name, age, job) {
    // 屬性
    this.name = name;
    this.age = age;
    this.job = job;
    // 方法
    if(typeof this.sayName != "function") {
        Person.prototype.sayName = function() {
            alert(this.name);
        }
    }
}

六宣蔚、寄生構造函數(shù)模式

創(chuàng)建一個函數(shù)向抢,該函數(shù)的作用僅僅是封裝創(chuàng)建對象的代碼,然后在返回新創(chuàng)建的對象件已。跟工廠模式一模一樣

function SpecialArray() {
    var values = new Array();
    values.push.apply(values, arguments);
    values.toPipedString = function() {
        return this.join("|");
    }
    return values;
}
var colors = new SpecialArray("red", "blue", "green");
alert(colors.toPipedString());
  1. 返回的對象與構造函數(shù)或者與構造函數(shù)的原型屬性之間沒有關系笋额,也就是說,構造函數(shù)返回的對象與在狗仔函數(shù)外部創(chuàng)建的對象沒有什么不同篷扩。
  2. 不能依賴instanceof操作符來確定對象類型。

七茉盏、穩(wěn)妥構造函數(shù)模式

沒有公共屬性鉴未,而且其方法也并不引用this的對象

function Person(name, age, job) {
    var o = new Object()
    o.sayName = function() {
        alert(name);
    }
    return o;
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸠姨,隨后出現(xiàn)的幾起案子铜秆,更是在濱河造成了極大的恐慌,老刑警劉巖讶迁,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件连茧,死亡現(xiàn)場離奇詭異,居然都是意外死亡巍糯,警方通過查閱死者的電腦和手機啸驯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祟峦,“玉大人罚斗,你說我怎么就攤上這事≌悖” “怎么了针姿?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵袱吆,是天一觀的道長。 經(jīng)常有香客問我距淫,道長绞绒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任榕暇,我火速辦了婚禮蓬衡,結果婚禮上,老公的妹妹穿的比我還像新娘拐揭。我一直安慰自己撤蟆,他們只是感情好,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布堂污。 她就那樣靜靜地躺著家肯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盟猖。 梳的紋絲不亂的頭發(fā)上讨衣,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天,我揣著相機與錄音式镐,去河邊找鬼反镇。 笑死,一個胖子當著我的面吹牛娘汞,可吹牛的內(nèi)容都是我干的歹茶。 我是一名探鬼主播,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼你弦,長吁一口氣:“原來是場噩夢啊……” “哼惊豺!你這毒婦竟也來了?” 一聲冷哼從身側響起禽作,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤尸昧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旷偿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烹俗,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年萍程,在試婚紗的時候發(fā)現(xiàn)自己被綠了幢妄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡尘喝,死狀恐怖磁浇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情朽褪,我是刑警寧澤置吓,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布无虚,位于F島的核電站,受9級特大地震影響衍锚,放射性物質發(fā)生泄漏友题。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一戴质、第九天 我趴在偏房一處隱蔽的房頂上張望度宦。 院中可真熱鬧,春花似錦告匠、人聲如沸戈抄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽划鸽。三九已至,卻和暖如春戚哎,著一層夾襖步出監(jiān)牢的瞬間裸诽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工型凳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丈冬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓甘畅,卻偏偏與公主長得像埂蕊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疏唾,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容