真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

一些前端基礎(chǔ)知識(shí)整理

這篇文章主要講解了“一些前端基礎(chǔ)知識(shí)整理”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“一些前端基礎(chǔ)知識(shí)整理”吧!

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、瓊結(jié)網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁面制作、購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為瓊結(jié)等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

Call, bind, apply實(shí)現(xiàn)

// call Function.prototype.myCall = function (context) {   context = context ? Object(context) : window    context.fn = this;    let args = [...arguments].slice(1);   const result = context.fn(...args);   delete context.fn;   return result; }  // apply Function.prototype.myApply = function (context) {   context = context ? Object(context) : window;   context.fn = this;    let args = [...arguments][1];   let result;   if (args.length === 0) {       result = context.fn();   } else {       result = context.fn(args);   }   delete context.fn;   return result; }  // bind Function.prototype.myBind = function (context) {   let self = this;   let args = [...arguments].slice(1);    return function() {     let newArgs = [...arguments];     return self.apply(context, args.concat(newArgs));   } }

原型與原型鏈

每一個(gè)JavaScript對(duì)象(null除外)在創(chuàng)建的時(shí)候會(huì)關(guān)聯(lián)另一個(gè)對(duì)象,這個(gè)被關(guān)聯(lián)的對(duì)象就是原型。每一個(gè)JavaScript對(duì)象(除了  null)都具有的__proto__屬性會(huì)指向該對(duì)象的原型。JavaScript中所有的對(duì)象都是由它的原型對(duì)象繼承而來,而原型也是一個(gè)對(duì)象,它也有自己的原型對(duì)象,這樣層層上溯,就形成了一個(gè)類似鏈表的結(jié)構(gòu),這就是原型鏈。每一個(gè)對(duì)象都會(huì)從原型"繼承"屬性。

實(shí)例對(duì)象和構(gòu)造函數(shù)都可以指向原型, 原型可以指向構(gòu)造函數(shù),不能指向?qū)嵗?因?yàn)榭梢杂卸鄠€(gè)實(shí)例)。

原型對(duì)象有兩個(gè)屬性,constructor 和 __proto__。

function Person() {} var person = new Person();  // 實(shí)例原型 === 構(gòu)造函數(shù)原型 person.__proto__ === Person.prototype // true // 原型構(gòu)造函數(shù) === 構(gòu)造函數(shù) Person.prototype.constructor === Person // true

react diff

  • React 通過制定大膽的 diff 策略,將 O(n3) 復(fù)雜度的問題轉(zhuǎn)換成 O(n) 復(fù)雜度的問題;

  • React 通過分層求異的策略,對(duì) tree diff 進(jìn)行算法優(yōu)化;

  • 對(duì)樹進(jìn)行分層比較,兩棵樹只會(huì)對(duì)同一層次的節(jié)點(diǎn)進(jìn)行比較。

  • React 通過相同類生成相似樹形結(jié)構(gòu),不同類生成不同樹形結(jié)構(gòu)的策略,對(duì) component diff 進(jìn)行算法優(yōu)化;

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 如果是同一類型的組件,按照原策略繼續(xù)比較 virtual DOM tree。

  3. 如果不是,則將該組件判斷為 dirty component,從而替換整個(gè)組件下的所有子節(jié)點(diǎn)。

  4. 對(duì)于同一類型的組件,有可能其 Virtual DOM 沒有任何變化,如果能夠確切的知道這點(diǎn)那可以節(jié)省大量的 diff 運(yùn)算時(shí)間,因此 React  允許用戶通過 shouldComponentUpdate() 來判斷該組件是否需要進(jìn)行 diff。

  • React 通過設(shè)置唯一 key的策略,對(duì) element diff 進(jìn)行算法優(yōu)化;

  • 建議,在開發(fā)組件時(shí),保持穩(wěn)定的 DOM 結(jié)構(gòu)會(huì)有助于性能的提升;

遍歷對(duì)象

對(duì)象遍歷方法總結(jié):

  • for...in:遍歷對(duì)象自身, 包含繼承, 可枚舉,不含 Symbol 的屬性。

  • Object.keys(obj):遍歷對(duì)象自身, 不含繼承,可枚舉,不含 Symbol 的屬性。【values, entries】

  • Object.getOwnPropertyNames(obj):遍歷對(duì)象自身, 不含繼承, 不含 Symbol 的屬性, 不管是否可枚舉

  • Object.getOwnPropertySymbols(obj): 遍歷對(duì)象自身, 不含繼承, 所有 Symbol 的屬性, 不管是否可枚舉

  • Reflect.ownKeys(obj): 遍歷對(duì)象自身,不含繼承,所有鍵名,不管是否Symbol 和可枚舉。

  • 對(duì)象其他方法:

  • JSON.stringify():只串行化對(duì)象自身,不含繼承,可枚舉,不含 Symbol屬性?!緁unction,undefined,  Symbol會(huì)丟失, set、map會(huì)處理成空對(duì)象】

  • Object.assign():只拷貝對(duì)象自身,不含繼承, 可枚舉屬性, 不管是否是Symbol ?!救繑?shù)據(jù)類型屬性值】

一些前端基礎(chǔ)知識(shí)整理

異步加載腳本

默認(rèn)情況下,瀏覽器是同步加載 JavaScript 腳本,即渲染引擎遇到