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

資訊專欄INFORMATION COLUMN

前端面試題系列 - 繼承

asce1885 / 1771人閱讀

摘要:返回值為所創建的新對象例如是什么怎么使用可以列舉一個的實際應用嗎可以直接在一個對象上定義或修改屬性,并返回該對象。該方法返回值被用作屬性值。

大概會用一個系列,講一下面試過程中經常會問的一些問題,以及我覺得應該可以怎么回答。

當然,我的回答也并不是標準答案,只是我自己的一些理解,也歡迎其他人發表自己的想法。

作為本系列的第一篇文章,就先講講被問的最多的 js 繼承問題,但是應該不會寫原型鏈相關的東西,

先列舉一個最簡單的問題:

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

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

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

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

子類的實例可以通過 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 提供了一個創建對象的方法,使用現有的對象作為新創建對象的__proto__,同時可以傳入添加到新對象的可枚舉屬性, 這些屬性可以對應到Object.defineProperties 的第二個參數中。

返回值為所創建的新對象.

例如:

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

Object.defineProperties 是什么?怎么使用?可以列舉一個 Object.definProperties 的實際應用嗎?

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

例如:

target = Object.defineProperties(target, props)

本質上 Object.defineProperties 是對Object.defineProperty 的集中調用,可以理解為是Object.definePeropety的復數版。

Object.defineProperty 的使用方法為:

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

所以本質上Object.defineProperties 就是如下代碼:

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

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

configurable: 當且僅當該屬性的 configurable 為 true 時,該屬性描述符才能夠被改變,同時該屬性也能從對應的對象上被刪除。默認為 false

enumerable: 當且僅當該屬性的enumerable為 true 時,該屬性才能夠出現在對象的枚舉屬性中。默認為 false

value: 該屬性對應的值。可以是任何有效的 JavaScript 值(數值,對象,函數等)。默認為 undefined

writable: 當且僅當該屬性的writable為true時,value才能被賦值運算符改變。默認為 false。

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

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

如果一個 descriptor 不具有 value, writebale, getset 任意一個關鍵字,那么將會被認為是一個數據描述符。
如果一個描述符同時具有(valuewritbale)和(getset),將會產生一個異常.

繼承多個父類怎么做?

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

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

但是繼承多個父類的話,子類就不能通過 son instanceof superClass 這樣的驗證了.

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

Object.assign 方法用于將所有可枚舉屬性從一個或多個源對象復制到目標對象,并返回目標對象,例如:

target = Object.assign(target, source)

如果具有同名屬性,那么在后面對象中的屬性,將會覆蓋目標對象中的屬性。

需要注意以下幾點:

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

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

可以拷貝 symbol 類型的屬性

Object.assign 會調用 settergetter 嗎?調用的是哪里的settergetter ?

Object.assign 會調用源對象的 getter,并把源對象的 getter 的返回值當做新對象的該屬性的值。
setter 則是會直接加在新創建的對象中,而不會沿用源對象的 setter.

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

Object.getOwnPropertyDescriptor 返回直到對象上一個自有屬性對應的描述符,例如:

Object.getOwnPropertyDescriptor(obj, prop)

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

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

相關文章

  • 查漏補缺 - 收藏集 - 掘金

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

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

    摘要:函數式編程前端掘金引言面向對象編程一直以來都是中的主導范式。函數式編程是一種強調減少對程序外部狀態產生改變的方式。 JavaScript 函數式編程 - 前端 - 掘金引言 面向對象編程一直以來都是JavaScript中的主導范式。JavaScript作為一門多范式編程語言,然而,近幾年,函數式編程越來越多得受到開發者的青睞。函數式編程是一種強調減少對程序外部狀態產生改變的方式。因此,...

    cfanr 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優化頁面加載速度的方法隨筆分類中個最重要的技術點常用整理網頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數組函數數據訪問性能優化方案實現的大排序算法一怪對象常用方法函數收集數組的操作面向對象和原型繼承中關鍵詞的優雅解釋淺談系列 H5系列 10種優化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術點 常用meta整理 網頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優化頁面加載速度的方法隨筆分類中個最重要的技術點常用整理網頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數組函數數據訪問性能優化方案實現的大排序算法一怪對象常用方法函數收集數組的操作面向對象和原型繼承中關鍵詞的優雅解釋淺談系列 H5系列 10種優化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術點 常用meta整理 網頁性能管理詳解 HTML5 ...

    muddyway 評論0 收藏0

發表評論

0條評論

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