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

資訊專(zhuān)欄INFORMATION COLUMN

前端面試題系列 - 繼承

asce1885 / 1773人閱讀

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

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

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

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

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

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

子類(lèi)可以使用父類(lèi)的方法和屬性

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

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

子類(lèi)的實(shí)例可以通過(guò) foo instanceof superClass 測(cè)試

常見(jiàn)的解法
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
}

引申的問(wèn)題:

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 的方法,如果沒(méi)有 getter 則為 undefined。該方法返回值被用作屬性值。默認(rèn)為 undefined

set: 一個(gè)給屬性提供 setter 的方法,如果沒(méi)有 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è)父類(lèi)怎么做?

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

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

但是繼承多個(gè)父類(lèi)的話,子類(lèi)就不能通過(guò) 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):

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

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

可以拷貝 symbol 類(lèi)型的屬性

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 是什么?主要用來(lái)做什么?

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.specialneedsforspecialkids.com/yun/97497.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

0條評(píng)論

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