成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

前端面試題系列 - 繼承

asce1885 / 1807人閱讀

摘要:返回值為所創(chuàng)建的新對(duì)象例如是什么怎么使用可以列舉一個(gè)的實(shí)際應(yīng)用嗎可以直接在一個(gè)對(duì)象上定義或修改屬性,并返回該對(duì)象。該方法返回值被用作屬性值。

大概會(huì)用一個(gè)系列,講一下面試過程中經(jīng)常會(huì)問的一些問題,以及我覺得應(yīng)該可以怎么回答。

當(dāng)然,我的回答也并不是標(biāo)準(zhǔn)答案,只是我自己的一些理解,也歡迎其他人發(fā)表自己的想法。

作為本系列的第一篇文章,就先講講被問的最多的 js 繼承問題,但是應(yīng)該不會(huì)寫原型鏈相關(guān)的東西,

先列舉一個(gè)最簡單的問題:

寫一個(gè) inherit(superClass, subClass) 方法,實(shí)現(xiàn)subClass 繼承 superClass
題目隱含的內(nèi)容
繼承有哪些特征,如何檢測一個(gè)繼承是否成功?

子類可以使用父類的方法和屬性

子類可以自定義方法和屬性,但應(yīng)該不影響父類和其他繼承同一個(gè)父類的子類

子類的原型鏈上可以找到父類(子類的__proto__應(yīng)指向父類)

子類的實(shí)例可以通過 foo instanceof superClass 測試

常見的解法
es5
function inherit(p, s) {
  s.prototype = Object.create(p.prototype, {
    constructor: {
      value: s,
      enumerable: false,
      writebale: true,
      configurable: true
    }
  })

  Object.setPrototypeOf ? Object.setPrototypeOf(s, p) : s.__proto__ = p
} 
es4
function inherit(p, s) {
  var f = new Function ()
  f.prototype = new p()
  var r = new f()
  s.prototype = r
  s.prototype.constructor = s
  s.__proto__ = p
  f = null
  r = null
}

引申的問題:

Object.create 是什么?怎么使用?

Object.create(proto, [propertiesObject])

Object.create 提供了一個(gè)創(chuàng)建對(duì)象的方法,使用現(xiàn)有的對(duì)象作為新創(chuàng)建對(duì)象的__proto__,同時(shí)可以傳入添加到新對(duì)象的可枚舉屬性, 這些屬性可以對(duì)應(yīng)到Object.defineProperties 的第二個(gè)參數(shù)中。

返回值為所創(chuàng)建的新對(duì)象.

例如:

s.prototype = Object.create(f.prototype, {
  constructor: {
    value: s,
    enumberable: false,
    writealble: true,
    configurale: true
  }
})

Object.defineProperties 是什么?怎么使用?可以列舉一個(gè) Object.definProperties 的實(shí)際應(yīng)用嗎?

Object.defineProperties可以直接在一個(gè)對(duì)象上定義或修改屬性,并返回該對(duì)象。

例如:

target = Object.defineProperties(target, props)

本質(zhì)上 Object.defineProperties 是對(duì)Object.defineProperty 的集中調(diào)用,可以理解為是Object.definePeropety的復(fù)數(shù)版。

Object.defineProperty 的使用方法為:

target = Object.defineProperty(target, prop, descriptor)

所以本質(zhì)上Object.defineProperties 就是如下代碼:

Object.keys(props).forEach(function (prop) {
  let descriptor = props[prop]
  Object.defineProperty(target, prop, descriptor)
})

其中 descriptor 的可選值有以下集中:

configurable: 當(dāng)且僅當(dāng)該屬性的 configurable 為 true 時(shí),該屬性描述符才能夠被改變,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)象上被刪除。默認(rèn)為 false

enumerable: 當(dāng)且僅當(dāng)該屬性的enumerable為 true 時(shí),該屬性才能夠出現(xiàn)在對(duì)象的枚舉屬性中。默認(rèn)為 false。

value: 該屬性對(duì)應(yīng)的值??梢允侨魏斡行У?JavaScript 值(數(shù)值,對(duì)象,函數(shù)等)。默認(rèn)為 undefined

writable: 當(dāng)且僅當(dāng)該屬性的writable為true時(shí),value才能被賦值運(yùn)算符改變。默認(rèn)為 false。

get: 一個(gè)給屬性提供 getter 的方法,如果沒有 getter 則為 undefined。該方法返回值被用作屬性值。默認(rèn)為 undefined

set: 一個(gè)給屬性提供 setter 的方法,如果沒有 setter 則為 undefined。該方法將接受唯一參數(shù),并將該參數(shù)的新值分配給該屬性。默認(rèn)為 undefined。

如果一個(gè) descriptor 不具有 value, writebale, getset 任意一個(gè)關(guān)鍵字,那么將會(huì)被認(rèn)為是一個(gè)數(shù)據(jù)描述符。
如果一個(gè)描述符同時(shí)具有(valuewritbale)和(getset),將會(huì)產(chǎn)生一個(gè)異常.

繼承多個(gè)父類怎么做?

繼承多個(gè)父類的話,可以使用 Object.assign 方法。
例如:

targe = Object.assign({}, superClassA, superClassB, ...)

但是繼承多個(gè)父類的話,子類就不能通過 son instanceof superClass 這樣的驗(yàn)證了.

Object.assign 是什么?怎么用?用的時(shí)候有哪些需要注意?

Object.assign 方法用于將所有可枚舉屬性從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象,并返回目標(biāo)對(duì)象,例如:

target = Object.assign(target, source)

如果具有同名屬性,那么在后面對(duì)象中的屬性,將會(huì)覆蓋目標(biāo)對(duì)象中的屬性。

需要注意以下幾點(diǎn):

繼承屬性不可枚舉屬性是不能拷貝的。

原始類型會(huì)被包裝為對(duì)象,null, undefined 會(huì)被忽略,并且只有字符串的包裝對(duì)象才可能有自身可枚舉的屬性.

可以拷貝 symbol 類型的屬性

Object.assign 會(huì)調(diào)用 settergetter 嗎?調(diào)用的是哪里的settergetter ?

Object.assign 會(huì)調(diào)用源對(duì)象的 getter,并把源對(duì)象的 getter 的返回值當(dāng)做新對(duì)象的該屬性的值。
setter 則是會(huì)直接加在新創(chuàng)建的對(duì)象中,而不會(huì)沿用源對(duì)象的 setter.

Object.getOwnPropertyDescriptor 是什么?主要用來做什么?

Object.getOwnPropertyDescriptor 返回直到對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的描述符,例如:

Object.getOwnPropertyDescriptor(obj, prop)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/97497.html

相關(guān)文章

  • 查漏補(bǔ)缺 - 收藏集 - 掘金

    摘要:醞釀許久之后,筆者準(zhǔn)備接下來撰寫前端面試題系列文章,內(nèi)容涵蓋瀏覽器框架分鐘搞定常用基礎(chǔ)知識(shí)前端掘金基礎(chǔ)智商劃重點(diǎn)在實(shí)際開發(fā)中,已經(jīng)非常普及了。 這道題--致敬各位10年阿里的前端開發(fā) - 掘金很巧合,我在認(rèn)識(shí)了兩位同是10年工作經(jīng)驗(yàn)的阿里前端開發(fā)小伙伴,不但要向前輩學(xué)習(xí),我有時(shí)候還會(huì)選擇另一種方法逗逗他們,拿了網(wǎng)上一道經(jīng)典面試題,可能我連去阿里面試的機(jī)會(huì)都沒有,但是我感受到了一次面試1...

    YuboonaZhang 評(píng)論0 收藏0
  • JavaScript系列(四) - 收藏集 - 掘金

    摘要:函數(shù)式編程前端掘金引言面向?qū)ο缶幊桃恢币詠矶际侵械闹鲗?dǎo)范式。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。 JavaScript 函數(shù)式編程 - 前端 - 掘金引言 面向?qū)ο缶幊桃恢币詠矶际荍avaScript中的主導(dǎo)范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數(shù)式編程越來越多得受到開發(fā)者的青睞。函數(shù)式編程是一種強(qiáng)調(diào)減少對(duì)程序外部狀態(tài)產(chǎn)生改變的方式。因此,...

    cfanr 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

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

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

0條評(píng)論

閱讀需要支付1元查看
<