国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript 的對象繼承方式,有幾種寫法?

gggggggbong / 730人閱讀

摘要:四混合方式對象冒充的主要問題是必須使用構造函數方式,這不是最好的選擇。在中創建類的最好方式是用構造函數定義屬性,用原型定義方法。注意,雖然代表了父類的構造函數,但是返回的是子類的實例,即內部的指的是,因此在這里相當于。

一、對象冒充

其原理如下:構造函數使用 this 關鍵字給所有屬性和方法賦值(即采用類聲明的構造函數方式)。因為構造函數只是一個函數,所以可使 Parent 構造函數 成為 Children 的方法,然后調用它。Children 就會收到 Parent 的構造函數中定義的屬性和方法。例如,用下面的方式定義 Parent 和 Children:

原理:就是把 Parent 構造函數放到 Children 構造函數里面執行一次。那為什么不直接執行,非要轉個彎把 Parent 賦值給 Children 的 method 屬性再執行呢? 這跟 this 的指向有關,在函數內 this 是指向 window 的。當將 Parent 賦值給 Children 的 method 時, this 就指向了 Children 類的實例。

二、原型鏈繼承

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

注意:調用 Parent 的構造函數,沒有給它傳遞參數。這在原型鏈中是標準做法。要確保構造函數沒有任何參數。

三、使用 call 或 applay 方法

這個方法是與對象冒充方法最相似的方法,因為它也是通過改變了 this 的指向而實現繼承:

apply 方法本人就不舉列了,它和 call 方法的區別在于它的第二個參數必須是數組。

四、混合方式

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

五、使用 Object.create 方法

Object.create 方法會使用指定的原型對象及其屬性去創建一個新的對象:

@ 當執行 Children.prototype = Object.create(Parent.prototype) 這個語句后,Children 的 constructor 就被改變為 Parent ,因此需要將 Children.prototype.constructor 重 新指定為 Children 自身。

六、extends 關鍵字實現繼承

這個是 ES6 的語法糖,下面看下es6實現繼承的方法:

上面代碼中,子類的constructor方法沒有調用super之前,就使用this關鍵字,結果報錯,而放在super方法之后就是正確的。子類Children的構造函數之中的super(),代表調用父類Parent的構造函數。這是必須的,否則 JavaScript 引擎會報錯。

注意,super雖然代表了父類Parent的構造函數,但是返回的是子類Children的實例,即super內部的this指的是Children,因此super()在這里相當于Parent.prototype.constructor.call(this)。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/103614.html

相關文章

  • 2017年前端面試題整理

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

    Muninn 評論0 收藏0
  • 2017年前端面試題整理

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

    Ashin 評論0 收藏0
  • 2017年前端面試題整理

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

    Caicloud 評論0 收藏0
  • 深入理解JavaScript

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

    myeveryheart 評論0 收藏0
  • javascript面向對象

    摘要:構造函數模式用于定義實例屬性,而原型模式用于定義方法和共享的屬性,這種組合模式還支持向構造函數傳遞參數。實例對象都有自己的一份實例屬性的副本,同時又共享對方法的引用,最大限度地節省了內存。而關鍵字則代表實例對象。 相信大家對javascript中的面向對象寫法都不陌生,那還記得有幾種創建對象的寫法嗎?相信大家除了自己常寫的都有點模糊了,那接下來就由我來幫大家回憶回憶吧! 1. 構造函數...

    SKYZACK 評論0 收藏0

發表評論

0條評論

gggggggbong

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<