成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

javascript系列之構(gòu)造對(duì)象

psychola / 2676人閱讀

摘要:構(gòu)造函數(shù)模式使用操作符后跟構(gòu)造函數(shù)隱式原型指向由構(gòu)造函數(shù)構(gòu)造出來(lái)指向由函數(shù)構(gòu)造使用對(duì)象字面量表示法還支持對(duì)象和數(shù)組字面量,允許使用一種簡(jiǎn)潔而可讀的記法來(lái)創(chuàng)建數(shù)組和對(duì)象。通過同一個(gè)構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象,共享同一個(gè)原型對(duì)象。

構(gòu)造函數(shù)模式

1.使用new操作符后跟Object構(gòu)造函數(shù)

var  person = new Object();
person.name = "kitty";
person.age = 25;

person.__proto__(隱式原型)指向Object.prototype.

2.由構(gòu)造函數(shù)構(gòu)造出來(lái)

function Car(sColor,iDoors,iMpg) {
   this.color = sColor;
   this.doors = iDoors;
   this.mpg = iMpg;
   this.showColor = function() {
      alert(this.color);
   };
}

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);

person.__proto__指向Car.prototype.
3.由函數(shù)Object.create構(gòu)造

var person1 = {
    name: "cyl",
    sex: "male"
};

var person2 = Object.create(person1);
使用“對(duì)象字面量”表示法

JavaScript還支持對(duì)象和數(shù)組字面量,允許使用一種簡(jiǎn)潔而可讀的記法來(lái)創(chuàng)建數(shù)組和對(duì)象。

var person = {
    name : "kitty",
    age:25
};
工廠模式
function createCar(sColor,iDoors,iMpg) {
    var oTempCar = new Object;
    oTempCar.color = sColor;
    oTempCar.doors = iDoors;
    oTempCar.mpg = iMpg;
    oTempCar.showColor = function() {
        alert(this.color);
    };

    return oTempCar;
}

var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25);
oCar1.showColor();      //輸出 "red"
oCar2.showColor();      //輸出 "blue"

前面的例子中,每次調(diào)用函數(shù) createCar(),都要?jiǎng)?chuàng)建新函數(shù) showColor(),意味著每個(gè)對(duì)象都有自己的 showColor() 版本。而事實(shí)上,每個(gè)對(duì)象都共享同一個(gè)函數(shù)。javascript中沒有什么static和成員變量之分,如果想在對(duì)象之間共享數(shù)據(jù)或方法,只能借助原型對(duì)象,將共享的變量和方法都放在原型對(duì)象中。

原型方式
function Car() {}
  Car.prototype.color = "blue";
  Car.prototype.doors = 4;
  Car.prototype.mpg = 25;
  Car.prototype.drivers = new Array("Mike","John");
  Car.prototype.showColor = function() {
       alert(this.color);
   }
};

var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Bill");

alert(oCar1.drivers);  //輸出 "Mike,John,Bill"
alert(oCar2.drivers);  //輸出 "Mike,John,Bill"
混合的構(gòu)造函數(shù)/原型方式(相對(duì)完美的解決方式)

聯(lián)合使用構(gòu)造函數(shù)和原型方式,就可像用其他程序設(shè)計(jì)語(yǔ)言一樣創(chuàng)建對(duì)象。這種概念非常簡(jiǎn)單,即用構(gòu)造函數(shù)定義對(duì)象的所有非函數(shù)屬性,用原型方式定義對(duì)象的函數(shù)屬性(方法)。結(jié)果是,所有函數(shù)都只創(chuàng)建一次,而每個(gè)對(duì)象都具有自己的對(duì)象屬性實(shí)例。

function Car(sColor,iDoors,iMpg) {
    this.color = sColor;
    this.doors = iDoors;
    this.mpg = iMpg;
    this.drivers = new Array("Mike","John");
}

Car.prototype.showColor = function() {
    alert(this.color);
};

var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);
oCar1.drivers.push("Bill"); 

alert(oCar1.drivers);  //輸出 "Mike,John,Bill"
alert(oCar2.drivers);  //輸出 "Mike,John"

JS的構(gòu)造函數(shù)都有一個(gè)prototype屬性,指向它的原型對(duì)象(其實(shí)就是個(gè)普通的JS對(duì)象)。通過同一個(gè)構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象,共享同一個(gè)原型對(duì)象。原型對(duì)象初始化的時(shí)候是空的,我們可以在里面自定義任何屬性和方法,這些方法和屬性都將被該構(gòu)造函數(shù)所創(chuàng)建的對(duì)象繼承。如果原型發(fā)生了變化,那么所有實(shí)例都會(huì)跟著改變。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93793.html

相關(guān)文章

  • JavaScript深入new的模擬實(shí)現(xiàn)

    摘要:深入系列第十二篇,通過的模擬實(shí)現(xiàn),帶大家揭開使用獲得構(gòu)造函數(shù)實(shí)例的真相一句話介紹運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具有構(gòu)造函數(shù)的內(nèi)置對(duì)象類型之一也許有點(diǎn)難懂,我們?cè)谀M之前,先看看實(shí)現(xiàn)了哪些功能。 JavaScript深入系列第十二篇,通過new的模擬實(shí)現(xiàn),帶大家揭開使用new獲得構(gòu)造函數(shù)實(shí)例的真相 new 一句話介紹 new: new 運(yùn)算符創(chuàng)建一個(gè)用戶定義的對(duì)象類型的實(shí)例或具...

    tianlai 評(píng)論0 收藏0
  • JavaScript深入從原型到原型鏈

    摘要:深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。讓我們用一張圖表示構(gòu)造函數(shù)和實(shí)例原型之間的關(guān)系在這張圖中我們用表示實(shí)例原型。 JavaScript深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(gòu)造函數(shù)的實(shí)例的原型,原型的原型,原型的原型的原型是什么,就來(lái)看看這篇文章吧。 構(gòu)造函數(shù)創(chuàng)建對(duì)象 我們先...

    Songlcy 評(píng)論0 收藏0
  • JavaScript系列 - 深入從原型到原型鏈

    摘要:本文詳情構(gòu)造函數(shù)創(chuàng)建對(duì)象先使用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象在這個(gè)例子中,就是一個(gè)構(gòu)造函數(shù),我們使用創(chuàng)建了一個(gè)實(shí)例對(duì)象。 本文詳情:https://github.com/mqyqingfen... 構(gòu)造函數(shù)創(chuàng)建對(duì)象先使用構(gòu)造函數(shù)創(chuàng)建一個(gè)對(duì)象 function Person(){ } var person = new Person(); person.name = Mit; console.lo...

    shadajin 評(píng)論0 收藏0
  • JavaScript深入創(chuàng)建對(duì)象的多種方式以及優(yōu)缺點(diǎn)

    摘要:深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。也就是說(shuō)打著構(gòu)造函數(shù)的幌子掛羊頭賣狗肉,你看創(chuàng)建的實(shí)例使用都無(wú)法指向構(gòu)造函數(shù)這樣方法可以在特殊情況下使用。 JavaScript深入系列第十四篇,講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 寫在前面 這篇文章講解創(chuàng)建對(duì)象的各種方式,以及優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,因?yàn)椤禞avaScript高級(jí)程序設(shè)計(jì)》寫得真是太好了! 1....

    Terry_Tai 評(píng)論0 收藏0
  • JavaScript深入繼承的多種方式和優(yōu)缺點(diǎn)

    摘要:深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。優(yōu)點(diǎn)融合原型鏈繼承和構(gòu)造函數(shù)的優(yōu)點(diǎn),是中最常用的繼承模式。寄生組合式繼承為了方便大家閱讀,在這里重復(fù)一下組合繼承的代碼組合繼承最大的缺點(diǎn)是會(huì)調(diào)用兩次父構(gòu)造函數(shù)。 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎...

    JackJiang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<