創(chuàng)建對象方式

1.Object 模式
var o1 = {};//字面量的表現(xiàn)形式
var o2 = new Object;
2.工廠模式
function createCar(name,age){
    var oTemp = new Object();
    oTemp.name = name;//直接給對象添加屬性奏寨,每個對象都有直接的屬性
    oTemp.age = age;
    oTemp.showName = function () {
        alert(this.name);
    };//每個對象都有一個 showName 方法版本
    return oTemp;
}
createCar("tom").showName();

減少了重復代碼起意,但是不能夠識別對象,所有實例都是object類型的病瞳。

3.構造器模式
function Car(sColor,iDoors){  //聲明為構造器時需要將函數(shù)名首字母大寫
    this.color = sColor;      //構造器內直接聲明屬性
    this.doors = iDoors;
    this.showColor = function(){
        return this.color;
    };//每個 Car 對象都有自己的 showColor方法版本
    this.showDoor = function () {
        return this.doors;
    }
}

每個方法在每個實例上都要重新實現(xiàn)一遍揽咕,一是耗資源,二是創(chuàng)建兩個或者多個完成同樣任務的Function沒有必要套菜,三是有this在亲善,沒必要在代碼執(zhí)行前就把函數(shù)綁定到特定對象上。

4.prototype模式
function Person(){}
Person.prototype.name="lxy";
Person.prototype.age=22;
Person.prototype.job="Software Engineer";
Person.prototype.sayName=function(){
    alert(this.name);
}  
 
var lxy=new Person();
lxy.sayName();

原型也有它本身的問題逗柴,共享的屬性值如果是引用類型蛹头,一個實例對該屬性的修改會影響到其他實例。

5.構造器方式與原型方式的混合模式
//每個對象有專屬的屬性不會與其他對象共享
function Car(sColor,iDoors){
    this._color = sColor;//私有屬性變量名稱頭加下劃線標識
    this._doors = iDoors;
    this.drivers = new Array("Mike","John");//公有屬性標識
}
//所有對象共享一個方法版本戏溺,減少內存浪費
Car.prototype.showColor = function () {
    alert(this._color);
};

var car = new Car("red",4);

這種構造函數(shù)與原型混合模式渣蜗,是目前使用最廣泛、認同度最高的一種創(chuàng)建自定義類型的方法旷祸「剑可以說,這是用來定義引用類型的一種默認模式托享。其實原型就是為構造函數(shù)服務的骚烧,配合它來創(chuàng)建對象,想要只通過原型一勞永逸的創(chuàng)建對象是不可取的闰围,因為它只管創(chuàng)建共享的屬性和方法止潘,剩下的就交給構造函數(shù)來完成。

6.動態(tài)原型模式
function Car(sColor,iDoors,iMpg){
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array("Mike","John");

    //使用標志(_initialized)來判斷是否已給原型賦予了任何方法,保證方法永遠只被創(chuàng)建并賦值一次
    if(typeof Car._initialized == "undefined"){//因為這里的標記是附加在類上,故如果后期直接對其進行修改,還是有可能出現(xiàn)再次創(chuàng)建的情況
        Car.prototype.showColor = function () {//為Car添加一個存放在 prototype 域的方法
            alert(this.color);
        };
        Car._initialized = true;//設置一個靜態(tài)屬性
    }
}
var car = new Car("red",3,25);

使用動態(tài)原型時辫诅,不能使用對象字面量重寫原型。如果在已經(jīng)創(chuàng)建了實例的情況下重寫原型涧狮,那么就會切斷現(xiàn)有實例與新原型之間的聯(lián)系炕矮。

7.混合工廠模式
function Car(){
    var oTempCar = new Object;
    oTempCar.color = "blue";
    oTempCar.doors = 4;
    oTempCar.showColor = function () {
        alert(this.color);
    };
    return oTempCar;
}
var car = new Car();

由于在 Car6()構造函數(shù)內部調用了 new 運算符,所以將忽略第二個 new 運算符(位于構造函數(shù)之外),

附:new操作符具體干了什么呢?

1、創(chuàng)建一個空對象者冤,并且 this 變量引用該對象肤视,同時還繼承了該函數(shù)的原型。
2涉枫、屬性和方法被加入到 this 引用的對象中邢滑。
3、新創(chuàng)建的對象由 this 所引用愿汰,并且最后隱式的返回 this 困后。
//等價于下面代碼
var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末乐纸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摇予,更是在濱河造成了極大的恐慌汽绢,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧戴,死亡現(xiàn)場離奇詭異宁昭,居然都是意外死亡,警方通過查閱死者的電腦和手機酗宋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門积仗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蜕猫,你說我怎么就攤上這事寂曹。” “怎么了丹锹?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵稀颁,是天一觀的道長。 經(jīng)常有香客問我楣黍,道長匾灶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任租漂,我火速辦了婚禮阶女,結果婚禮上,老公的妹妹穿的比我還像新娘哩治。我一直安慰自己秃踩,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布业筏。 她就那樣靜靜地躺著憔杨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蒜胖。 梳的紋絲不亂的頭發(fā)上消别,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音台谢,去河邊找鬼寻狂。 笑死,一個胖子當著我的面吹牛朋沮,可吹牛的內容都是我干的蛇券。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纠亚!你這毒婦竟也來了塘慕?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤菜枷,失蹤者是張志新(化名)和其女友劉穎苍糠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啤誊,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡岳瞭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚊锹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞳筏。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牡昆,靈堂內的尸體忽然破棺而出姚炕,到底是詐尸還是另有隱情,我是刑警寧澤丢烘,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布柱宦,位于F島的核電站,受9級特大地震影響播瞳,放射性物質發(fā)生泄漏掸刊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一赢乓、第九天 我趴在偏房一處隱蔽的房頂上張望忧侧。 院中可真熱鬧,春花似錦牌芋、人聲如沸蚓炬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肯夏。三九已至,卻和暖如春犀暑,著一層夾襖步出監(jiān)牢的瞬間熄捍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工母怜, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缚柏。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓苹熏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子轨域,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容