最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript設(shè)計(jì)模式之原型模式分析【ES5與ES6】

 更新時(shí)間:2018年07月26日 10:07:30   作者:筱葭  
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之原型模式,簡(jiǎn)單描述了原型模式的概念、原理,并結(jié)合實(shí)例形式分析了ES5與ES6實(shí)現(xiàn)原型模式的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了JavaScript設(shè)計(jì)模式之原型模式。分享給大家供大家參考,具體如下:

從設(shè)計(jì)模式的角度講,原型模式是用于創(chuàng)建對(duì)象的一種模式,若需要?jiǎng)?chuàng)建一個(gè)對(duì)象,一種方法是先指定其類型,然后通過類來創(chuàng)建這個(gè)對(duì)象,另一種方法是通過原型來創(chuàng)建,不必關(guān)心對(duì)象的具體類型,而是找到一個(gè)對(duì)象,然后通過克隆來創(chuàng)建一個(gè)一模一樣的對(duì)象。

ES5提供了Object.create(obj)方法來克隆對(duì)象,在不支持Object.create(obj)方法的瀏覽器中,可以使用以下代碼:

Object.create = Object.create || function(obj) {
  function Func() {};
  Func.prototype = obj;
  return new Func();
}

一、JavaScript中的原型繼承:

1. 大部分的數(shù)據(jù)都是對(duì)象;

JavaScript有兩種類型機(jī)制:基本類型和對(duì)象類型?;绢愋桶?code>undefined、number、booleanstring、functionobject。

JavaScript設(shè)計(jì)者的本意在于,除了undefined,一切都應(yīng)該是對(duì)象,為了實(shí)現(xiàn)這一目標(biāo),number、boolean、string這幾種基本數(shù)據(jù)類型通過對(duì)應(yīng)的包裝類Number、Boolean、String來變成對(duì)象類型數(shù)據(jù)。

JavaScript中的根對(duì)象是Object.prototype對(duì)象,Object.prototype對(duì)象是一個(gè)空的對(duì)象。JavaScript的每個(gè)對(duì)象,實(shí)際上都是從Object.prototype對(duì)象克隆而來的,Object.prototype對(duì)象就是它們的原型。

ES5提供了getPrototypeOf來查看對(duì)象的原型,Object.getPrototypeOf(任何對(duì)象) == Object.prototype都會(huì)返回true。

2. 要得到一個(gè)對(duì)象,不是通過實(shí)例化類,而是找到一個(gè)對(duì)象作為原型并克隆它;

JavaScript沒有類的概念,new運(yùn)算符后面的不是類,而是構(gòu)造器。當(dāng)使用new運(yùn)算符來創(chuàng)建對(duì)象時(shí),實(shí)際上也是先克隆Object.prototype對(duì)象,再進(jìn)行一些額外操作的過程。

3. 對(duì)象會(huì)記住它的原型;

其實(shí)不能說對(duì)象有原型,而只能說對(duì)象的構(gòu)造器有原型。JavaScript給對(duì)象提供了一個(gè)名為__proto__屬性,默認(rèn)指向它的構(gòu)造器的原型,__proto__屬性是對(duì)象與構(gòu)造器的原型聯(lián)系起來的紐帶,如:person.__proto__ == Person.prototype

4. 若對(duì)象無(wú)法響應(yīng)某個(gè)請(qǐng)求,它會(huì)把該請(qǐng)求委托給它自己的原型。

這是原型繼承的精髓,當(dāng)一個(gè)對(duì)象無(wú)法響應(yīng)某個(gè)請(qǐng)求時(shí),會(huì)順著原型鏈把請(qǐng)求傳遞下去,直到遇到一個(gè)可以處理該請(qǐng)求的對(duì)象為止。但是,原型鏈并不是無(wú)限長(zhǎng)的,只會(huì)查找到Object.prototype對(duì)象為止,由于Object.prototype的原型是null,因此請(qǐng)求無(wú)法找到可以處理的對(duì)象,返回undefined。

二、原型繼承的未來

使用Object.create來實(shí)現(xiàn)原型繼承似乎更能體現(xiàn)原型模式的精髓,但是,通過Object.create創(chuàng)建對(duì)象的效率并不高,通常要比通過構(gòu)造函數(shù)創(chuàng)建對(duì)象慢。

ES6帶來了新的Class語(yǔ)法,這讓JavaScript看起來像是一門基于類的語(yǔ)言,但背后仍然是通過原型機(jī)制來創(chuàng)建對(duì)象。

class Person {
  constuctor(name) {
    this.name = name;
  }
  getName() {
    return this.name;
  }
}
class Student extends Person {
  constuctor(name) {
    super(name);
  }
  sayHello() {
    alert(“Hello”);
  }
}
var student = new Student(“Alice”);
student.sayHello();

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《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)飛機(jī)大戰(zhàn)小游戲

    原生JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲

    這篇文章主要為大家詳細(xì)介紹了原生JS實(shí)現(xiàn)飛機(jī)大戰(zhàn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • js switch case default 的用法示例介紹

    js switch case default 的用法示例介紹

    switch case default的用法應(yīng)該存在一部分人不會(huì)使用吧,其實(shí)很簡(jiǎn)單就是每個(gè)case后,一定要加:break;default,就相當(dāng)于else,不會(huì)的朋友可以了解下
    2013-10-10
  • js獲取數(shù)組中的最大值的9種方法總結(jié)

    js獲取數(shù)組中的最大值的9種方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了js獲取數(shù)組中的最大值的9種方法,以及每種方法的工作原理和用法,文中的示例代碼講解詳細(xì),需要的可以參考下
    2023-08-08
  • javascript:void(0)使用探討

    javascript:void(0)使用探討

    如果想做一個(gè)鏈接點(diǎn)擊后不做任何事情,或者響應(yīng)點(diǎn)擊而完成其他事情一般都是設(shè)置屬性href = "#"其實(shí)還有比這更好的方法,下面為大家整理了幾種比較常見的解決方法,感興趣的朋友可以參考下
    2013-08-08
  • 輕松掌握J(rèn)avaScript代理模式

    輕松掌握J(rèn)avaScript代理模式

    這篇文章主要幫助大家輕松掌握J(rèn)avaScript代理模式,什么是代理模式?代理的用途,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Javascript簡(jiǎn)單實(shí)現(xiàn)面向?qū)ο缶幊汤^承實(shí)例代碼

    Javascript簡(jiǎn)單實(shí)現(xiàn)面向?qū)ο缶幊汤^承實(shí)例代碼

    這篇文章主要介紹了Javascript簡(jiǎn)單實(shí)現(xiàn)面向?qū)ο缶幊汤^承實(shí)例代碼,簡(jiǎn)單分析了面向?qū)ο蟪绦蛟O(shè)計(jì)的特征與繼承的具體實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • js實(shí)現(xiàn)Select頭像選擇實(shí)時(shí)預(yù)覽代碼

    js實(shí)現(xiàn)Select頭像選擇實(shí)時(shí)預(yù)覽代碼

    這篇文章主要介紹了js實(shí)現(xiàn)Select頭像選擇實(shí)時(shí)預(yù)覽代碼,涉及javascript動(dòng)態(tài)遍歷及設(shè)置select選項(xiàng)的技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-08-08
  • javascript隨機(jī)生成用戶名的實(shí)現(xiàn)方式

    javascript隨機(jī)生成用戶名的實(shí)現(xiàn)方式

    這篇文章主要介紹了javascript隨機(jī)生成用戶名的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • JavaScript設(shè)計(jì)模式之代理模式介紹

    JavaScript設(shè)計(jì)模式之代理模式介紹

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之代理模式介紹,代理模式顧名思義就是用一個(gè)類來代替另一個(gè)類來執(zhí)行方法功能,需要的朋友可以參考下
    2014-12-12
  • JS訪問DOM節(jié)點(diǎn)方法詳解

    JS訪問DOM節(jié)點(diǎn)方法詳解

    這篇文章主要介紹了JS訪問DOM節(jié)點(diǎn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了JS訪問DOM節(jié)點(diǎn)的相關(guān)函數(shù)與使用方法,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

龙川县| 开阳县| 饶阳县| 鹤岗市| 雷山县| 即墨市| 博乐市| 图木舒克市| 江津市| 阜宁县| 邵阳县| 农安县| 沭阳县| 若羌县| 中西区| 广州市| 军事| 平罗县| 胶南市| 疏勒县| 陆河县| 韶山市| 衡水市| 东辽县| 洮南市| 灵川县| 驻马店市| 阿城市| 德令哈市| 公安县| 岱山县| 会昌县| 盘锦市| 什邡市| 三明市| 莱芜市| 陇南市| 定结县| 安平县| 吉林省| 镇平县|