JS創(chuàng)建自定義對(duì)象的六種方法總結(jié)
1、創(chuàng)建一個(gè) Object 實(shí)例
var person = new Object(); person.name = "rose"; person.age = 18; person.job = "actor"; person.sayName = function () { console.log(this.name); }; console.log(person);
2、對(duì)象字面量
var person = { name: "rose", age: 18, job: "actor", sayName: function () { console.log(this.name); }, }; console.log(person);
上面兩種方式是創(chuàng)建對(duì)象的兩種基本方式,他們的原型就是 Object
3、工廠模式
function createPerson(name,age,actor){ var person = new Object(); person.name = "rose"; person.age = 18; person.job = "actor"; person.sayName = function () { console.log(this.name); }; return person } console.log(p1 instanceof Object);//true console.log(p1 instanceof createPerson);//false
從上面代碼中我們可以看出來,工廠模式實(shí)際上就是借助函數(shù),內(nèi)部返回使用第一種方式( new Object())創(chuàng)建的對(duì)象。
優(yōu)點(diǎn):可以很方便的創(chuàng)建相似對(duì)象。
缺點(diǎn):沒有解決對(duì)象識(shí)別的問題,即怎樣知道一個(gè)對(duì)象的類型。
4、構(gòu)造函數(shù)方式
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { console.log(this.name); }; } var p = new person("rose", 18, "actor"); console.log(p instanceof Person);//true console.log(p instanceof Object);//true
構(gòu)造函數(shù)可以創(chuàng)建特定類型的對(duì)象,像 Object , Array 這樣的原生構(gòu)造函數(shù),在運(yùn)行時(shí)會(huì)自動(dòng)出現(xiàn)在執(zhí)行環(huán)境中。
構(gòu)造函數(shù)模式與工廠模式的不同之處為:
- 沒有顯式得創(chuàng)建對(duì)象,
- 直接將屬性和方法賦值給了this對(duì)象
- 沒有return語句
構(gòu)造函數(shù)方式創(chuàng)建對(duì)象必須使用 new ,操作符,會(huì)經(jīng)歷下面四個(gè)步驟
- 創(chuàng)建一個(gè)對(duì)象
- this指向這個(gè)新創(chuàng)建的對(duì)象
- 執(zhí)行代碼
- 返回這個(gè)對(duì)象
構(gòu)造函數(shù)方式的優(yōu)點(diǎn):以構(gòu)造函數(shù)創(chuàng)建的對(duì)象,在其原型上都會(huì)有一個(gè) constructor 屬性,這個(gè)屬性指向構(gòu)造函數(shù) Person 而這個(gè)屬性最初是用來標(biāo)識(shí)數(shù)據(jù)類型的。
憂化
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = sayName; } function sayName(){ console.log(this.name); } var p = new person("rose", 18, "actor");
缺點(diǎn):當(dāng)對(duì)象需要很多方法的時(shí)候,就會(huì)定義多個(gè)全局作用域下的函數(shù),這樣一來,不僅毫無封裝性可言,而且讓全局作用域下的函數(shù)過多。
5、原型模式
function Person() {} Person.prototype.name = "rose"; Person.prototype.age = 18; Person.prototype.sayName = function () { console.log(this.name); }; var p = new Person(); console.log(p);
說到原型對(duì)象就要說一下原型鏈,原型與原型鏈對(duì)象如下圖所示:
我們可以看到,在prototype上面定義的所有屬性都是在其原型對(duì)象上。在原型對(duì)象上的屬性與方法屬于公有屬性和公有方法。其所有實(shí)例都可以訪問到。
6、**組合使用構(gòu)造函數(shù)模式和原型模式 ** 最常用
function Person(name, age) { this.name = name; this.age = age; } Person.prototype.sayName = function () { console.log(this.name); }; var p = new Person("rose", 18); console.log(p);
對(duì)象在引用其屬性的時(shí)候,會(huì)按照原型鏈去查找,直到查找到Object的原型。
總結(jié)
到此這篇關(guān)于JS創(chuàng)建自定義對(duì)象的六種方法的文章就介紹到這了,更多相關(guān)JS創(chuàng)建自定義對(duì)象方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)前端網(wǎng)頁版倒計(jì)時(shí)
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)前端網(wǎng)頁版倒計(jì)時(shí),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03百度地圖JavascriptApi Marker平滑移動(dòng)及車頭指向行徑方向
本文主要介紹了百度地圖JavascriptApi Marker平滑移動(dòng)及車頭指向行徑方向的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-03-03JavaScript實(shí)現(xiàn)網(wǎng)頁圖片等比例縮放實(shí)現(xiàn)代碼及調(diào)用方式
為了保證圖片統(tǒng)一大小,直接設(shè)置圖片大小又會(huì)導(dǎo)致圖片拉伸,造成圖片模糊,接下來將介紹的代碼可以在圖片加載完成后自動(dòng)按比例調(diào)整圖片大小,感興趣的你可以參考下2013-02-02javascript判斷元素存在和判斷元素存在于實(shí)時(shí)的dom中的方法
本文主要介紹了javascript判斷元素存在和判斷元素存在于實(shí)時(shí)的dom中的方法。具有一定的參考價(jià)值,下面跟著小編一起來看下吧2017-01-01解決js相同的正則多次調(diào)用test()返回的值卻不同的問題
今天小編就為大家分享一篇解決js相同的正則多次調(diào)用test()返回的值卻不同的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10Javascript設(shè)計(jì)模式之觀察者模式的多個(gè)實(shí)現(xiàn)版本實(shí)例
這篇文章主要介紹了Javascript設(shè)計(jì)模式之觀察者模式的多個(gè)實(shí)現(xiàn)版本實(shí)例,本文給出3種實(shí)現(xiàn)版本代碼,同時(shí)給出了Jquery實(shí)現(xiàn)版本,需要的朋友可以參考下2015-03-03echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題淺析
這篇文章主要給大家介紹了關(guān)于echarts自定義餅圖數(shù)據(jù)刷新和顏色渲染問題的相關(guān)資料,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,需要的朋友可以參考下2023-05-05