日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
前端基礎(chǔ)知識(shí)整理匯總二

接上昨天的《前端基礎(chǔ)知識(shí)整理匯總(上)》,這些知識(shí)雖然是很基礎(chǔ)的,但是對于系統(tǒng)的梳理還是非常有幫助的,也希望這些內(nèi)容對你有所幫助。

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、四川網(wǎng)絡(luò)推廣、微信小程序開發(fā)、四川網(wǎng)絡(luò)營銷、四川企業(yè)策劃、四川品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供四川建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:www.cdcxhl.com

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

 
 
 
 
  1. // call 
  2. Function.prototype.myCall = function (context) { 
  3.   context = context ? Object(context) : window  
  4.   context.fn = this; 
  5.  
  6.   let args = [...arguments].slice(1); 
  7.   const result = context.fn(...args); 
  8.   delete context.fn; 
  9.   return result; 
  10.  
  11. // apply 
  12. Function.prototype.myApply = function (context) { 
  13.   context = context ? Object(context) : window; 
  14.   context.fn = this; 
  15.  
  16.   let args = [...arguments][1]; 
  17.   let result; 
  18.   if (args.length === 0) { 
  19.       result = context.fn(); 
  20.   } else { 
  21.       result = context.fn(args); 
  22.   } 
  23.   delete context.fn; 
  24.   return result; 
  25.  
  26. // bind 
  27. Function.prototype.myBind = function (context) { 
  28.   let self = this; 
  29.   let args = [...arguments].slice(1);  
  30.   return function() { 
  31.     let newArgs = [...arguments]; 
  32.     return self.apply(context, args.concat(newArgs)); 
  33.   } 

原型與原型鏈

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

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

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

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

react diff

  • React 通過制定大膽的 diff 策略,將 O(n3) 復(fù)雜度的問題轉(zhuǎn)換成 O(n) 復(fù)雜度的問題;
  • React 通過分層求異的策略,對 tree diff 進(jìn)行算法優(yōu)化;
  • 對樹進(jìn)行分層比較,兩棵樹只會(huì)對同一層次的節(jié)點(diǎn)進(jìn)行比較。
  • React 通過相同類生成相似樹形結(jié)構(gòu),不同類生成不同樹形結(jié)構(gòu)的策略,對 component diff 進(jìn)行算法優(yōu)化;
  1. 如果是同一類型的組件,按照原策略繼續(xù)比較 virtual DOM tree。
  2. 如果不是,則將該組件判斷為 dirty component,從而替換整個(gè)組件下的所有子節(jié)點(diǎn)。
  3. 對于同一類型的組件,有可能其 Virtual DOM 沒有任何變化,如果能夠確切的知道這點(diǎn)那可以節(jié)省大量的 diff 運(yùn)算時(shí)間,因此 React 允許用戶通過 shouldComponentUpdate() 來判斷該組件是否需要進(jìn)行 diff。
  • React 通過設(shè)置唯一 key的策略,對 element diff 進(jìn)行算法優(yōu)化;
  • 建議,在開發(fā)組件時(shí),保持穩(wěn)定的 DOM 結(jié)構(gòu)會(huì)有助于性能的提升;

遍歷對象

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

  • for...in:遍歷對象自身, 包含繼承, 可枚舉,不含 Symbol 的屬性。
  • Object.keys(obj):遍歷對象自身, 不含繼承,可枚舉,不含 Symbol 的屬性?!緑alues, entries】
  • Object.getOwnPropertyNames(obj):遍歷對象自身, 不含繼承, 不含 Symbol 的屬性, 不管是否可枚舉
  • Object.getOwnPropertySymbols(obj): 遍歷對象自身, 不含繼承, 所有 Symbol 的屬性, 不管是否可枚舉
  • Reflect.ownKeys(obj): 遍歷對象自身,不含繼承,所有鍵名,不管是否Symbol 和可枚舉。
  • 對象其他方法:
  • JSON.stringify():只串行化對象自身,不含繼承,可枚舉,不含 Symbol屬性?!緁unction,undefined, Symbol會(huì)丟失, set、map會(huì)處理成空對象】
  • Object.assign():只拷貝對象自身,不含繼承, 可枚舉屬性, 不管是否是Symbol ?!救繑?shù)據(jù)類型屬性值】

異步加載腳本

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