成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript 的對(duì)象繼承方式,有幾種寫法?

gggggggbong / 741人閱讀

摘要:四混合方式對(duì)象冒充的主要問題是必須使用構(gòu)造函數(shù)方式,這不是最好的選擇。在中創(chuàng)建類的最好方式是用構(gòu)造函數(shù)定義屬性,用原型定義方法。注意,雖然代表了父類的構(gòu)造函數(shù),但是返回的是子類的實(shí)例,即內(nèi)部的指的是,因此在這里相當(dāng)于。

一、對(duì)象冒充

其原理如下:構(gòu)造函數(shù)使用 this 關(guān)鍵字給所有屬性和方法賦值(即采用類聲明的構(gòu)造函數(shù)方式)。因?yàn)闃?gòu)造函數(shù)只是一個(gè)函數(shù),所以可使 Parent 構(gòu)造函數(shù) 成為 Children 的方法,然后調(diào)用它。Children 就會(huì)收到 Parent 的構(gòu)造函數(shù)中定義的屬性和方法。例如,用下面的方式定義 Parent 和 Children:

原理:就是把 Parent 構(gòu)造函數(shù)放到 Children 構(gòu)造函數(shù)里面執(zhí)行一次。那為什么不直接執(zhí)行,非要轉(zhuǎn)個(gè)彎把 Parent 賦值給 Children 的 method 屬性再執(zhí)行呢? 這跟 this 的指向有關(guān),在函數(shù)內(nèi) this 是指向 window 的。當(dāng)將 Parent 賦值給 Children 的 method 時(shí), this 就指向了 Children 類的實(shí)例。

二、原型鏈繼承

眾所周知,JavaScript 是一門基于原型的語言,在 JavaScript 中 prototype 對(duì)象的任何屬性和方法都被傳遞給那個(gè)類的所有實(shí)例。原型鏈利用這種功能來實(shí)現(xiàn)繼承機(jī)制:

注意:調(diào)用 Parent 的構(gòu)造函數(shù),沒有給它傳遞參數(shù)。這在原型鏈中是標(biāo)準(zhǔn)做法。要確保構(gòu)造函數(shù)沒有任何參數(shù)。

三、使用 call 或 applay 方法

這個(gè)方法是與對(duì)象冒充方法最相似的方法,因?yàn)樗彩峭ㄟ^改變了 this 的指向而實(shí)現(xiàn)繼承:

apply 方法本人就不舉列了,它和 call 方法的區(qū)別在于它的第二個(gè)參數(shù)必須是數(shù)組。

四、混合方式

對(duì)象冒充的主要問題是必須使用構(gòu)造函數(shù)方式,這不是最好的選擇。不過如果使用原型鏈,就無法使用帶參數(shù)的構(gòu)造函數(shù)了。如何選擇呢?答案很簡(jiǎn)單,兩者都用。 在 JavaScript 中創(chuàng)建類的最好方式是用構(gòu)造函數(shù)定義屬性,用原型定義方法。這種方式同樣適用于繼承機(jī)制:

五、使用 Object.create 方法

Object.create 方法會(huì)使用指定的原型對(duì)象及其屬性去創(chuàng)建一個(gè)新的對(duì)象:

@ 當(dāng)執(zhí)行 Children.prototype = Object.create(Parent.prototype) 這個(gè)語句后,Children 的 constructor 就被改變?yōu)?Parent ,因此需要將 Children.prototype.constructor 重 新指定為 Children 自身。

六、extends 關(guān)鍵字實(shí)現(xiàn)繼承

這個(gè)是 ES6 的語法糖,下面看下es6實(shí)現(xiàn)繼承的方法:

上面代碼中,子類的constructor方法沒有調(diào)用super之前,就使用this關(guān)鍵字,結(jié)果報(bào)錯(cuò),而放在super方法之后就是正確的。子類Children的構(gòu)造函數(shù)之中的super(),代表調(diào)用父類Parent的構(gòu)造函數(shù)。這是必須的,否則 JavaScript 引擎會(huì)報(bào)錯(cuò)。

注意,super雖然代表了父類Parent的構(gòu)造函數(shù),但是返回的是子類Children的實(shí)例,即super內(nèi)部的this指的是Children,因此super()在這里相當(dāng)于Parent.prototype.constructor.call(this)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103614.html

相關(guān)文章

  • 2017年前端面試題整理

    摘要:函數(shù)內(nèi)置不可變,在函數(shù)體內(nèi)整個(gè)執(zhí)行環(huán)境中為常量。這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)的對(duì)象的值??刂票韱慰丶慕脿顟B(tài)。生成相對(duì)定位的元素,相對(duì)于其在普通流中的位置進(jìn)行定位。 Javasript 1.請(qǐng)定義一個(gè)方法,傳入一個(gè)string類型的參數(shù),然后將string的每個(gè)字符間加個(gè)空格返回 spacify(hello world) // => h e l...

    Muninn 評(píng)論0 收藏0
  • 2017年前端面試題整理

    摘要:函數(shù)內(nèi)置不可變,在函數(shù)體內(nèi)整個(gè)執(zhí)行環(huán)境中為常量。這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)的對(duì)象的值??刂票韱慰丶慕脿顟B(tài)。生成相對(duì)定位的元素,相對(duì)于其在普通流中的位置進(jìn)行定位。 Javasript 1.請(qǐng)定義一個(gè)方法,傳入一個(gè)string類型的參數(shù),然后將string的每個(gè)字符間加個(gè)空格返回 spacify(hello world) // => h e l...

    Ashin 評(píng)論0 收藏0
  • 2017年前端面試題整理

    摘要:函數(shù)內(nèi)置不可變,在函數(shù)體內(nèi)整個(gè)執(zhí)行環(huán)境中為常量。這兩個(gè)方法的用途都是在特定的作用域中調(diào)用函數(shù),實(shí)際上等于設(shè)置函數(shù)體內(nèi)的對(duì)象的值。控制表單控件的禁用狀態(tài)。生成相對(duì)定位的元素,相對(duì)于其在普通流中的位置進(jìn)行定位。 Javasript 1.請(qǐng)定義一個(gè)方法,傳入一個(gè)string類型的參數(shù),然后將string的每個(gè)字符間加個(gè)空格返回 spacify(hello world) // => h e l...

    Caicloud 評(píng)論0 收藏0
  • 深入理解JavaScript

    摘要:深入之繼承的多種方式和優(yōu)缺點(diǎn)深入系列第十五篇,講解各種繼承方式和優(yōu)缺點(diǎn)。對(duì)于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn) JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點(diǎn)。 但是注意: 這篇文章更像是筆記,哎,再讓我...

    myeveryheart 評(píng)論0 收藏0
  • javascript面向對(duì)象

    摘要:構(gòu)造函數(shù)模式用于定義實(shí)例屬性,而原型模式用于定義方法和共享的屬性,這種組合模式還支持向構(gòu)造函數(shù)傳遞參數(shù)。實(shí)例對(duì)象都有自己的一份實(shí)例屬性的副本,同時(shí)又共享對(duì)方法的引用,最大限度地節(jié)省了內(nèi)存。而關(guān)鍵字則代表實(shí)例對(duì)象。 相信大家對(duì)javascript中的面向?qū)ο髮懛ǘ疾荒吧?,那還記得有幾種創(chuàng)建對(duì)象的寫法嗎?相信大家除了自己常寫的都有點(diǎn)模糊了,那接下來就由我來幫大家回憶回憶吧! 1. 構(gòu)造函數(shù)...

    SKYZACK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<