摘要:對(duì)象字面量小李我叫今年歲工廠模式但是,雖然構(gòu)造函數(shù)和對(duì)象字面量可以用來(lái)創(chuàng)建單個(gè)對(duì)象,但是這樣創(chuàng)建對(duì)象會(huì)產(chǎn)生大量的重復(fù)代碼。構(gòu)造函數(shù)模式在中的構(gòu)造函數(shù)可以創(chuàng)建特定類(lèi)型的對(duì)象。
調(diào)用系統(tǒng)的構(gòu)造函數(shù)
創(chuàng)建一個(gè)最簡(jiǎn)單的方式就是創(chuàng)建一個(gè)Object的實(shí)例,如下:
// 1. 調(diào)用系統(tǒng)的構(gòu)造函數(shù) var person = new Object(); // 添加屬性 person.name = "小李"; person.age = 22; person.sex = "F"; // 添加方法 person.eat = function () { console.log("我喜歡吃油炸榴蓮.") }; person.play = function () { console.log("我喜歡玩電子游戲.") }; person.introduce = function () { console.log("我叫" + this.name + ", 今年" + this.age + "歲."); }; person.introduce(); // 輸出:我叫小李, 今年22歲.
上面的代碼創(chuàng)建了一個(gè)名為object的對(duì)象,并為它添加了三個(gè)屬性和三個(gè)方法。
對(duì)象字面量var person = { name: "小李", age: 22, sex: "F", introduce: function() { console.log("我叫" + this.name + ", 今年" + this.age + "歲."); } }工廠模式
但是,雖然Object構(gòu)造函數(shù)和對(duì)象字面量可以用來(lái)創(chuàng)建單個(gè)對(duì)象,但是這樣創(chuàng)建對(duì)象會(huì)產(chǎn)生大量的重復(fù)代碼。于是人們開(kāi)始使用工廠模式。如下:
function createPerson(name, age, sex) { var object = new Object(); person.name = "小李"; person.age = 22; person.sex = "F"; person.introduce = function () { console.log("我叫" + this.name + ", 今年" + this.age + "歲."); }; return person; } var person0 = createPerson("小蘇", "21", "M"); var person1 = createPerson("鐵子", "27", "M");
函數(shù)createPerson()能夠根據(jù)接受的參數(shù)來(lái)構(gòu)建一個(gè)包含所有信息的Person對(duì)象。可以無(wú)數(shù)次地調(diào)用這個(gè)函數(shù),而每次它都會(huì)返回一個(gè)包含三個(gè)屬性和一個(gè)方法的對(duì)象。工廠模式雖然解決了創(chuàng)建多個(gè)類(lèi)似對(duì)象導(dǎo)致的代碼大量重復(fù)的問(wèn)題,但卻沒(méi)有解決對(duì)象識(shí)別的問(wèn)題,即如何知道一個(gè)對(duì)象的類(lèi)型。隨著JavaScript的發(fā)展,又一個(gè)新的模式出現(xiàn)了,那就是構(gòu)造函數(shù)模式。
構(gòu)造函數(shù)模式在ECMAScript中的構(gòu)造函數(shù)可以創(chuàng)建特定類(lèi)型的對(duì)象。像Object對(duì)象和Array對(duì)象這樣的原生構(gòu)造函數(shù),在運(yùn)行的時(shí)候回自動(dòng)出現(xiàn)在執(zhí)行環(huán)境中。此外我們也可以自定義構(gòu)造函數(shù),從而自定義對(duì)象的類(lèi)型和方法。例如,前面的例子可以用自動(dòng)以構(gòu)造函數(shù)重寫(xiě)為以下的代碼:
function Person(name, age, sex) { this.name = name; this.age = age; this.sex = sex; this.introduce = function () { console.log("我叫" + this.name + ", 今年" + this.age + "歲."); }; } var person0 = new Person("小蘇", "21", "M"); var person1 = new Person("鐵子", "27", "M");
要?jiǎng)?chuàng)建一個(gè)Person的新實(shí)例,必須使用new操作符。這種操作方式調(diào)用構(gòu)造函數(shù)實(shí)際上會(huì)經(jīng)歷一下4個(gè)過(guò)程:
創(chuàng)建一個(gè)新對(duì)象;
將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此this就指向了這個(gè)新對(duì)象);
執(zhí)行構(gòu)造函數(shù)中的代碼;
返回這個(gè)新對(duì)象。
工廠模式和構(gòu)造函數(shù)的區(qū)別構(gòu)造函數(shù)沒(méi)有顯式地創(chuàng)建對(duì)象;
構(gòu)造函數(shù)直接將屬性和方法賦給了this對(duì)象;
構(gòu)造函數(shù)沒(méi)有return語(yǔ)句,即沒(méi)有返回值;
構(gòu)造函數(shù)首字母需要大寫(xiě)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/107675.html
摘要:對(duì)象在中,除了數(shù)字字符串布爾值這幾個(gè)簡(jiǎn)單類(lèi)型外,其他的都是對(duì)象。那么在函數(shù)對(duì)象中,這兩個(gè)屬性的有什么區(qū)別呢表示該函數(shù)對(duì)象的原型表示使用來(lái)執(zhí)行該函數(shù)時(shí)這種函數(shù)一般成為構(gòu)造函數(shù),后面會(huì)講解,新創(chuàng)建的對(duì)象的原型。這時(shí)的函數(shù)通常稱(chēng)為構(gòu)造函數(shù)。。 本文原發(fā)于我的個(gè)人博客,經(jīng)多次修改后發(fā)到sf上。本文仍在不斷修改中,最新版請(qǐng)?jiān)L問(wèn)個(gè)人博客。 最近工作一直在用nodejs做開(kāi)發(fā),有了nodejs,...
摘要:注意句柄棧并不是調(diào)用棧中的一部分,但句柄域卻在棧中。一個(gè)依賴(lài)于構(gòu)造函數(shù)和析構(gòu)函數(shù)來(lái)管理下層對(duì)象的生命周期。對(duì)象模板用來(lái)配置將這個(gè)函數(shù)作為構(gòu)造函數(shù)而創(chuàng)建的對(duì)象。 如果你已經(jīng)閱讀過(guò)了上手指南,那么你已經(jīng)知道了如何作為一個(gè)單獨(dú)的虛擬機(jī)使用 V8 ,并且熟悉了一些 V8 中的關(guān)鍵概念,如句柄,域 和上下文。在本文檔中,還將繼續(xù)深入討論這些概念并且介紹其他一些在你的 C++ 應(yīng)用中使用 V8 的...
摘要:對(duì)象的分類(lèi)內(nèi)置對(duì)象原生對(duì)象就是語(yǔ)言預(yù)定義的對(duì)象,在標(biāo)準(zhǔn)定義,有解釋器引擎提供具體實(shí)現(xiàn)宿主對(duì)象指的是運(yùn)行環(huán)境提供的對(duì)象。不過(guò)類(lèi)型是中所有類(lèi)型的父級(jí)所有類(lèi)型的對(duì)象都可以使用的屬性和方法,可以通過(guò)的構(gòu)造函數(shù)來(lái)創(chuàng)建自定義對(duì)象。 對(duì)象 javaScript中的對(duì)象,和其它編程語(yǔ)言中的對(duì)象一樣,可以比照現(xiàn)實(shí)生活中的對(duì)象來(lái)理解。在JavaScript中,一個(gè)對(duì)象可以是一個(gè)單獨(dú)擁有屬性和類(lèi)型的實(shí)體。和...
摘要:在最開(kāi)始的時(shí)候,原型對(duì)象的設(shè)計(jì)主要是為了獲取對(duì)象的構(gòu)造函數(shù)。同理數(shù)組通過(guò)調(diào)用函數(shù)通過(guò)調(diào)用原型鏈中描述了原型鏈的概念,并將原型鏈作為實(shí)現(xiàn)繼承的主要方法。 對(duì)象的創(chuàng)建 在JavaScript中創(chuàng)建一個(gè)對(duì)象有三種方式。可以通過(guò)對(duì)象直接量、關(guān)鍵字new和Object.create()函數(shù)來(lái)創(chuàng)建對(duì)象。 1. 對(duì)象直接量 創(chuàng)建對(duì)象最直接的方式就是在JavaScript代碼中使用對(duì)象直接量。在ES5...
摘要:當(dāng)談到語(yǔ)言與其他編程語(yǔ)言相比時(shí),你可能會(huì)聽(tīng)到一些令人困惑東西,其中之一是工廠函數(shù)和構(gòu)造函數(shù)。好的,讓我們用構(gòu)造函數(shù)做同樣的實(shí)驗(yàn)。當(dāng)我們使用工廠函數(shù)創(chuàng)建對(duì)象時(shí),它的指向,而當(dāng)從構(gòu)造函數(shù)創(chuàng)建對(duì)象時(shí),它指向它的構(gòu)造函數(shù)原型對(duì)象。 showImg(https://segmentfault.com/img/bVbr58T?w=1600&h=900); 當(dāng)談到JavaScript語(yǔ)言與其他編程語(yǔ)言...
摘要:在中函數(shù)是一等對(duì)象,它們不被聲明為任何東西的一部分,而所引用的對(duì)象稱(chēng)為函數(shù)上下文并不是由聲明函數(shù)的方式?jīng)Q定的,而是由調(diào)用函數(shù)的方式?jīng)Q定的。更為準(zhǔn)確的表述應(yīng)該為當(dāng)對(duì)象充當(dāng)函數(shù)的調(diào)用函數(shù)上下文時(shí),函數(shù)就充當(dāng)了對(duì)象的方法。 引言:當(dāng)理解了對(duì)象和函數(shù)的基本概念,你可能會(huì)發(fā)現(xiàn),在JavaScript中有很多原以為理所當(dāng)然(或盲目接受)的事情開(kāi)始變得更有意義了。 1.JavaScript...
閱讀 2086·2023-04-25 19:15
閱讀 2262·2021-11-23 09:51
閱讀 1270·2021-11-17 09:33
閱讀 2175·2021-08-26 14:15
閱讀 2487·2019-08-30 15:54
閱讀 1585·2019-08-30 15:54
閱讀 2175·2019-08-30 12:50
閱讀 1138·2019-08-29 17:08