摘要:構(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
摘要:深入系列第十二篇,通過的模擬實(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í)例或具...
摘要:深入系列的第一篇,從原型與原型鏈開始講起,如果你想知道構(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ì)象 我們先...
摘要:本文詳情構(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...
摘要:深入系列第十四篇,講解創(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....
摘要:深入系列第十五篇,講解各種繼承方式和優(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)。 但是注意: 這篇文章更像是筆記,哎...
閱讀 1196·2021-11-24 09:38
閱讀 2604·2021-09-27 14:00
閱讀 1165·2019-08-30 15:55
閱讀 1340·2019-08-30 14:16
閱讀 1491·2019-08-30 10:54
閱讀 2865·2019-08-28 17:58
閱讀 758·2019-08-26 13:22
閱讀 1234·2019-08-26 12:01