欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JS 創(chuàng)建對(duì)象的模式實(shí)例小結(jié)

 更新時(shí)間:2020年04月28日 10:50:56   作者:xiaoping  
這篇文章主要介紹了JS 創(chuàng)建對(duì)象的模式,結(jié)合實(shí)例形式總結(jié)分析了JS 創(chuàng)建對(duì)象的各種常用模式,包括工廠模式、構(gòu)造函數(shù)模式、原型模式、組合構(gòu)造和原型模式、動(dòng)態(tài)原型模式、寄生構(gòu)造函數(shù)模式、穩(wěn)妥構(gòu)造模式等,需要的朋友可以參考下

本文實(shí)例總結(jié)了JS 創(chuàng)建對(duì)象的模式。分享給大家供大家參考,具體如下:

1.工廠模式

抽象了創(chuàng)建具體對(duì)象的過(guò)程,創(chuàng)建了一種函數(shù),封裝特定的接口創(chuàng)建對(duì)象的細(xì)節(jié)。

  • 新建一個(gè)對(duì)象
  • 定義屬性和方法
  • return剛新建的對(duì)象
function createPerson(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = createPerson("name1", "age1", "job1");
var person2 = createPerson("name2", "age2", "job2");

存在問(wèn)題:

沒(méi)有解決對(duì)象識(shí)別的問(wèn)題(怎么識(shí)別對(duì)象的類(lèi)型)

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

  • 不顯式創(chuàng)建對(duì)象
  • 直接將屬性和方法定義在this
  • 沒(méi)有return
  • 通過(guò) new操作符調(diào)用
function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
 this.sayHi = function() {
 console.log(this.name);
 };
}

var person1 = new Person("name1", "age1", "job1");
var person2 = new Person("name2", "age2", "job2");

存在問(wèn)題:

  • 每個(gè)方法都要在實(shí)例上創(chuàng)建一次

3.原型模式

創(chuàng)建的每一個(gè)函數(shù)都有prototype原型屬性,這個(gè)屬性是一個(gè)指針,指向一個(gè)對(duì)象,這個(gè)對(duì)象的用途是包含可以由特定類(lèi)型的所有實(shí)例共享的屬性和方法。

所有原生引用類(lèi)型都在其構(gòu)造函數(shù)的原型上定義了方法

function Person{

}

Person.prototype.name="name"
Person.prototype.age="age"
Person.prototype.job="job"
Person.prototype.sayHi=function(){
 console.log(this.name)
}

var person1=new Person()
var person2=new Person()

存在問(wèn)題:

  • 所有屬性是被很多實(shí)例共享的

4.組合構(gòu)造和原型模式

構(gòu)造函數(shù)用來(lái)定義實(shí)例屬性,原型模式用來(lái)定義方法和共享的屬性

function Person(name, age, job) {
 this.name = name;
 this.age = age;
 this.job = job;
}
Person.prototype={
 constructor:Person;
 sayHi:function(){
 console.log(this.name)
 }
}

var person1 = new Person("name1", "age1", "job1");

5.動(dòng)態(tài)原型模式

這里對(duì)原型的修改,能夠?qū)λ袑?shí)例生效,只在初次調(diào)用構(gòu)造函數(shù)會(huì)執(zhí)行

function Person(name,age,job){
 this.name=name;
 this.age=age;
 this.job=job;
 if(typeof this.sayHi !="function" ){
 Person.prototype.sayHi=functong(){
  console.log(this.name)
 }
 }
}

var person1 = new Person("name1", "age1", "job1");

6.寄生構(gòu)造函數(shù)模式

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

  • 返回的對(duì)象與構(gòu)造函數(shù)、構(gòu)造函數(shù)的原型屬性之間沒(méi)有關(guān)系
  • 不能依賴(lài)instanceof來(lái)去定對(duì)象原型
  • 不建議使用
function Person(name, age, job) {
 var obj = new Object();
 obj.name = name;
 obj.age = age;
 obj.job = job;
 obj.sayHi = function() {
 congsole.log(this.name);
 };
 return obj;
}

var person1 = new Person("name1", "age1", "job1");

7.穩(wěn)妥構(gòu)造模式

  • 沒(méi)有公共屬性
  • 不使用this
  • 不使用new
function Person(name, age, job) {
 var obj = new Object();
 // 定義室友變量和函數(shù)
 obj.sayHi = function() {
 congsole.log(name);
 };
 return obj;
}

var person1 = Person("name1", "age1", "job1");
// name1

摘抄自《JavaScript 高級(jí)程序設(shè)計(jì)》第六章

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《javascript面向?qū)ο笕腴T(mén)教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • JS實(shí)現(xiàn)兼容火狐及IE iframe onload屬性的遮罩層隱藏及顯示效果

    JS實(shí)現(xiàn)兼容火狐及IE iframe onload屬性的遮罩層隱藏及顯示效果

    這篇文章主要介紹了JS實(shí)現(xiàn)兼容火狐及IE iframe onload屬性的遮罩層隱藏及顯示效果,涉及javascript事件響應(yīng)及針對(duì)頁(yè)面元素屬性的動(dòng)態(tài)操作相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • 簡(jiǎn)介alert()與console.log()的不同

    簡(jiǎn)介alert()與console.log()的不同

    alert()和console.log()在程序中經(jīng)常會(huì)用到,大家知道他們的區(qū)別嗎,接下來(lái),通過(guò)本文給大家介紹alert()與console.log()的不同,需要的朋友可以參考下
    2015-08-08
  • ES6中Set與WeakSet集合的深入講解

    ES6中Set與WeakSet集合的深入講解

    這篇文章主要給大家介紹了關(guān)于ES6中Set與WeakSet集合的相關(guān)資料,Set是ES6給開(kāi)發(fā)者帶來(lái)的一種新的數(shù)據(jù)結(jié)構(gòu),你可以理解為值的集合,WeakSet結(jié)構(gòu)同樣不會(huì)存儲(chǔ)重復(fù)的值,但它的成員必須是對(duì)象類(lèi)型的值,需要的朋友可以參考下
    2021-07-07
  • 基于javascript實(shí)現(xiàn)泡泡大冒險(xiǎn)網(wǎng)頁(yè)版小游戲

    基于javascript實(shí)現(xiàn)泡泡大冒險(xiǎn)網(wǎng)頁(yè)版小游戲

    這篇文章主要介紹了基于javascript實(shí)現(xiàn)泡泡大冒險(xiǎn)網(wǎng)頁(yè)版小游戲,很有趣的游戲,可以練習(xí)打字速度,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 10分鐘徹底搞懂微信小程序單頁(yè)面應(yīng)用路由

    10分鐘徹底搞懂微信小程序單頁(yè)面應(yīng)用路由

    這篇文章主要給大家介紹了光宇微信小程序單頁(yè)面應(yīng)用路由的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • JS target與currentTarget區(qū)別說(shuō)明

    JS target與currentTarget區(qū)別說(shuō)明

    target在事件流的目標(biāo)階段;currentTarget在事件流的捕獲,目標(biāo)及冒泡階段。只有當(dāng)事件流處在目標(biāo)階段的時(shí)候,兩個(gè)的指向才是一樣的,而當(dāng)處于捕獲和冒泡階段的時(shí)候,target指向被單擊的對(duì)象而currentTarget指向當(dāng)前事件活動(dòng)的對(duì)象(一般為父級(jí))。
    2011-08-08
  • WebApi+Bootstrap+KnockoutJs打造單頁(yè)面程序

    WebApi+Bootstrap+KnockoutJs打造單頁(yè)面程序

    這篇文章主要介紹了WebApi+Bootstrap+KnockoutJs打造單頁(yè)面程序的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • JS輕松實(shí)現(xiàn)CSS設(shè)置,DIV+CSS常用CSS設(shè)置

    JS輕松實(shí)現(xiàn)CSS設(shè)置,DIV+CSS常用CSS設(shè)置

    JS輕松實(shí)現(xiàn)CSS設(shè)置,DIV+CSS常用CSS設(shè)置...
    2007-02-02
  • javascript獲取select值的方法分析

    javascript獲取select值的方法分析

    這篇文章主要介紹了javascript獲取select值的方法,實(shí)例分析了javascript獲取select元素值的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • JS前端認(rèn)證授權(quán)技巧歸納總結(jié)

    JS前端認(rèn)證授權(quán)技巧歸納總結(jié)

    這篇文章主要為大家介紹了JS前端認(rèn)證授權(quán)技巧歸納總結(jié),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03

最新評(píng)論