日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

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

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

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

Call, bind, apply實現(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.   } 

原型與原型鏈

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

實例對象和構造函數(shù)都可以指向原型, 原型可以指向構造函數(shù),不能指向實例(因為可以有多個實例)。

原型對象有兩個屬性,constructor 和 __proto__。

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

react diff

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

遍歷對象

對象遍歷方法總結:

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

異步加載腳本

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