ES6重點知識點總結(2)
阿新 • • 發佈:2019-01-07
ES6重點知識點總結(2)
-
call和apply的作用是什麼?區別是什麼?
call和apply的功能基本相同,都是實現繼承或者轉換物件指標的作用;
唯一不通的是前者引數是羅列出來的,後者是存到陣列中的;
call或apply功能就是實現繼承的;與面向物件的繼承extends功能相似;但寫法不同;
語法:
.call(物件[,引數1,引數2,....]);//此地引數是指的是物件的引數,非方法的引數;
.apply(物件,引數陣列)//引數陣列的形式:[引數1,引數2,......]
-
push()-pop()-shift()-unshift()分別是什麼功能?
push 方法
將新元素新增到一個數組中,並返回陣列的新長度值。
var a=[1,2,3,4]; a.push(5); pop 方法 移除陣列中的最後一個元素並返回該元素。 var a=[1,2,3,4]; a.pop(); shift 方法 移除陣列中的第一個元素並返回該元素。 var a=[1,2]; alert(a.shift()); unshift 方法 將指定的元素插入陣列開始位置並返回該陣列。
-
介紹一下 JavaScript 原型,原型鏈,它們有何特點?
每個物件都會在其內部初始化一個屬性,就是prototype(原型),當我們訪問一個物件的屬性時,如果這個物件內部不存在這個屬性,那麼他就會去prototype裡找這個屬性,這個prototype又會有自己的prototype,於是就這樣一直找下去,也就是我們平時所說的原型鏈的概念。
關係:instance.constructor.prototype = instance.__proto__
特點:JavaScript物件是通過引用來傳遞的,我們建立的每個新物件實體中並沒有一份屬於自己的原型副本,當我們修改原型時,與之相關的物件也會繼承這一改變。
當我們需要一個屬性時,JavaScript引擎會先看當前物件中是否有這個屬性,如果沒有的話,就會查詢它的prototype物件是否有這個屬性,如此遞推下去,一致檢索到Object內建物件。
function Func(){} Func.prototype.name = "Xiaosong"; Func.prototype.getInfo = function() { return this.name; } var person = new Func(); console.log(person.getInfo());//"Xiaosong" console.log(Func.prototype);//Func { name = "Xiaosong", getInfo = function() }
JavaScript 如何實現繼承?
(1)構造繼承
(2)原型繼承
(3)例項繼承
(4)拷貝繼承 //原型prototype機制或apply和call方法去實現較簡單,建議使用建構函式與原型混合方式。 function Parent() { this.name = 'song'; } function Child() { this.age = 28; } Child.prototype = new Parent(); //通過原型,繼承了Parent var demo = new Child(); alert(demo.age); alert(demo.name); //得到被繼承的屬性
-
JavaScript 有哪幾種建立物件的方式?
javascript建立物件簡單的說,無非就是使用內建物件或各種自定義物件,當然還可以用JSON;但寫法有很多種,也能混合使用。
//
(1)物件字面量的方式
person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"}; (2)用function來模擬無參的建構函式 function Person(){} var person = new Person(); //定義一個function,如果使用new"例項化",該function可以看作是一個Class person.name = "Xiaosong"; person.age = "23"; person.work = function() { alert("Hello " + person.name); } person.work(); (3)用function來模擬參建構函式來實現(用this關鍵字定義構造的上下文屬性) function Person(name,age,hobby) { this.name = name; //this作用域:當前物件 this.age = age; this.work = work; this.info = function() { alert("我叫" + this.name + ",今年" + this.age + "歲,是個" + this.work); } } var Xiaosong = new Person("WooKong",23,"程式猿"); //例項化、建立物件 Xiaosong.info(); //呼叫info()方法 (4)用工廠方式來建立(內建物件) var jsCreater = new Object(); jsCreater.name = "Brendan Eich"; //JavaScript的發明者 jsCreater.work = "JavaScript"; jsCreater.info = function() { alert("我是"+this.work+"的發明者"+this.name); } jsCreater.info(); (5)用原型方式來建立 function Standard(){} Standard.prototype.name = "ECMAScript"; Standard.prototype.event = function() { alert(this.name+"是指令碼語言標準規範"); } var jiaoben = new Standard(); jiaoben.event(); (6)用混合方式來建立 function iPhone(name,event) { this.name = name; this.event = event; } iPhone.prototype.sell = function() { alert("我是"+this.name+",我是iPhone5s的"+this.event+"~ haha!"); } var SE = new iPhone("iPhone SE","官方翻新機"); SE.sell();
-
什麼是閉包(closure),為什麼要用它?
閉包是指有權訪問另一個函式作用域中變數的函式,建立閉包的最常見的方式就是在一個函式內建立另一個函式,通過另一個函式訪問這個函式的區域性變數,利用閉包可以突破作用鏈域,將函式內部的變數和方法傳遞到外部。
//閉包特性:
(1)函式內再巢狀函式
(2)內部函式可以引用外層的引數和變數
(3)引數和變數不會被垃圾回收機制回收
//li節點的onclick事件都能正確的彈出當前被點選的li索引
<ul>
<li> index = 0 </li> <li> index = 1 </li> <li> index = 2 </li> <li> index = 3 </li> </ul> <script type="text/javascript"> var nodes = document.getElementsByTagName('li'); for(i = 0;i<nodes.length;i+=1) { nodes[i].onclick = function() { console.log(i+1); //不使用閉包的話,值每次都是4 }(4); } </script>
-
你對 JSON 瞭解嗎?
JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。
它是基於JavaScript的一個子集。資料格式簡單,易於讀寫,佔用頻寬小。
如:{"age":"12", "name":"back"}
-
Ajax 是什麼?如何建立一個 Ajax ?
ajax的全稱:Asynchronous Javascript And XML,非同步傳輸+js+xml。
所謂非同步,在這裡簡單地解釋就是:向伺服器傳送請求的時候,我們不必等待結果,而是可以同時做其他的事情,等到有了結果它自己會根據設定進行後續操作,與此同時,頁面是不會發生整頁重新整理的,提高了使用者體驗。
//
(1)建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件
(2)建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊 (3)設定響應HTTP請求狀態變化的函式 (4)傳送HTTP請求 (5)獲取非同步呼叫返回的資料 (6)使用JavaScript和DOM實現區域性重新整理
-
同步和非同步的區別?
同步的概念應該是來自於作業系統中關於同步的概念:不同程序為協同完成某項工作而在先後次序上調整(通過阻塞,喚醒等方式)。
同步強調的是順序性,誰先誰後;非同步則不存在這種順序性。
//
同步:瀏覽器訪問伺服器請求,使用者看得到頁面重新整理,重新發請求,等請求完,頁面重新整理,新內容出現,使用者看到新內容,進行下一步操作。
//
非同步:瀏覽器訪問伺服器請求,使用者正常操作,瀏覽器後端進行請求。等請求完,頁面不重新整理,新內容也會出現,使用者看到新內容。
-
如何解決跨域問題?
jsonp、iframe、window.name、window.postMessage、伺服器上設定代理頁面
-
談一談你對 ECMAScript6 的瞭解?
ECMAScript 6 是JavaScript語言的下一代標準,已經在2015年6月正式釋出了。
它的目標,是使得JavaScript語言可以用來編寫複雜的大型應用程式,成為企業級開發語言。
標準的制定者有計劃,以後每年釋出一次標準,使用年份作為標準的版本。
因為當前版本的ES6是在2015年釋出的,所以又稱ECMAScript 2015。
也就是說,ES6就是ES2015
dom操作:
(1)建立新節點
createDocumentFragment() //建立一個DOM片段
createElement() //建立一個具體的元素
createTextNode() //建立一個文字節點
(2)新增、移除、替換、插入
appendChild()
removeChild()
replaceChild()
insertBefore() //在已有的子節點前插入一個新的子節點
(3)查詢
getElementsByTagName() //通過標籤名稱
getElementsByName() //通過元素的Name屬性的值(IE容錯能力較強,會得到一個數組,其中包括id等於name值的)
getElementById() //通過元素Id,唯一性
參考資源:https://www.jianshu.com/p/fc1faa8730b2