摘要:定義父類白色白色定義子類繼承紅色之前的繼承做法是通過原型鏈先指向父類的原型,然后把子類的構造函數(shù)指向定義的構造函數(shù)。這樣原型鏈上就有了父類的方法,構造函數(shù)里面也會有父類的構造函數(shù)。
書接上回,昨天我們說了展開,展開有什么用呢?
var arr1 = ["a", "b"]; var arr2 = ["c"]; var arr3 = ["d", "e"]; // ES5 的合并數(shù)組 arr1.concat(arr2, arr3); // [ "a", "b", "c", "d", "e" ] // ES6 的合并數(shù)組 [...arr1, ...arr2, ...arr3] // [ "a", "b", "c", "d", "e" ]
可以看到展開后可以做合并和賦值。
6、數(shù)組有了新方法,遍篩累加很省勁兒。map和forEach都可以遍歷數(shù)組,既然都可以遍歷數(shù)組,為什么要定義兩個方法呢?
其他這兩個方法是有不同的地方的:
內部代碼在return的時候,forEach不會生成新數(shù)組。map會生成一個新數(shù)組。
foreEach要想改變數(shù)組需要在callback函數(shù)中去改。
//map改變數(shù)組 let arr=[1,3,5]; let curArr=arr.map(function(item,index){ return item*2; }); console.log(curArr);//[2,6,10] //forEach改變數(shù)組 let arr=[1,3,5]; let curArr=arr.forEach(function(item,index){ return arr[index]=item*2; }) console.log(arr);//[2,6,10] console.log(curArr);//undefined;
filter是過濾器的意思,可以根據(jù)條件用來篩選數(shù)組中的元素。就好比流水線上的檢查員,篩選出合格的產品。
let arr=[1,2,6]; let curArr=arr.filter(function(item,index){ return item%2; }) console.log(curArr);
reduce是減少的意思,它可以執(zhí)行數(shù)組的累積運算然后返回一個數(shù)。就好比搭積木,多個積木最后搭成一個東西。
let arr=[1,2,6]; let sum=arr.reduce(function(prev,cur,index,arr){ //prev是前一步的操作和 //cur是當前值 //index是當前的索引 //arr是當前的數(shù)組 return prev+cur; }) console.log(sum);7、對象繼承新形式,聲明繼承更簡單。
我們先看下之前的對象聲明和繼承是怎么做的。
//定義父類 function Animal(name,color){ this.name=name; this.color=color; } Animal.prototype.showName=function(){ console.log(this.name); } Animal.prototype.showColor=function(){ console.log(this.color); } let obj1=new Animal("mimi","白色"); obj1.showName();//mimi obj1.showColor();//白色 //定義子類 function Cat(name,color,age){ Animal.apply(this,arguments); this.age=age; } //繼承 Cat.prototype=new Animal(); Cat.prototype.constructor=Cat; Cat.prototype.showAge=function(){ console.log(this.age); } let obj2=new Cat("hh","紅色",3); obj2.showName(); obj2.showColor(); obj2.showAge();
之前的繼承做法是通過原型鏈先指向父類的原型,然后把子類的構造函數(shù)指向定義的構造函數(shù)。
這樣原型鏈上就有了父類的方法,構造函數(shù)里面也會有父類的構造函數(shù)。
這樣定義有個問題就是類和構造函數(shù)是一起的,單把構造函數(shù)拿出來,也能做類也能做函數(shù)。
es6里面更嚴謹了,聲明類有了專門的class,繼承有了extends
//父類聲明 class Animal{ //構造函數(shù)聲明 constructor(name,color){ this.name=name; this.color=color; } //對象的方法聲明 showName(){ console.log(this.name); }; showColor(){ console.log(this.color); } } let obj1=new Animal("mimi","白色"); obj1.showName();//mimi obj1.showColor();//白色 //子類使用extends繼承 class Cat extends Animal{ constructor(name,color,age){ //構造函數(shù)內繼承父類的構造函數(shù) super(name,color);//super在這里代表了父類的構造函數(shù) this.age=age; } showAge(){ console.log(this.age); } } let obj2=new Cat("haha","紅色",6); obj2.showAge();//6 obj2.showName();//haha obj2.showColor();//紅色8、異步回調好麻煩,aysnc和await來幫忙
我們常見的異步回調會操作地獄回調,讓你傻傻分不清,經(jīng)常問自己,我代碼在哪里呢?我邏輯走到哪里去了?
$.ajax({url:"/data.txt"},function(){//第一步 $.ajax({url:"/data2.txt"},function(){//第二步 $.ajax({url:"/data3.txt"},function(){//第三步 $.ajax({url:"/data4.txt"},function(){//第四步 $.ajax({url:"/data5.txt"},function(){//第五步 }) }) }) }) })
如果我們用async和await就可以實現(xiàn)同步寫法實現(xiàn)異步回調的作用。
(async ()=>{ let res=await $.ajax({ url: "/data.txt" }); //第一步 console.log(res); let res2=await $.ajax({ url: "/data2.txt" }); //第二步 console.log(res2); let res3=await $.ajax({ url: "/data3.txt" }); //第三步 console.log(res3); let res4=await $.ajax({ url: "/data4.txt" }); //第四步 console.log(res4); let res5=await $.ajax({ url: "/data5.txt" }); //第五步 console.log(res5); })() show();
當然現(xiàn)在有很多提到Promise,Promise鏈式調用,我們來看下如果用Promise要怎么用
let p1=new Promise(function(resolve,reject){ $.ajax({ url: "data.txt", }) .done(function(data) { resolve(data); }) .fail(function(err) { reject(err); }) }) p1.then(function(data){ //成功 console.log(data); return $.ajax({url: "data2.txt"})//拋出Promise },function(err){ //失敗 console.log(err); }) //第二個Promise的處理 .then(function(data){ console.log(data); },function(err){ console.log(err); })9、模塊導入新方法,import和export要配合
es6用export來暴露模塊的屬性和方法,用import來引入模塊。
a.js
let a=2; let b=3; export {a,b}
index.html
在頁面中引入模塊,type是一定要聲明的,目前在谷歌瀏覽器中測試的時候,如果不聲明會報錯。
es6的這些新特性是不是很神奇,好了,今天我們先說到這里,工作中大家可以使用,具體的原理,我們后面講。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99082.html
摘要:說起大家都很熟悉,有些新特性等高級瀏覽器已經(jīng)實現(xiàn),不用我們去編譯了。今天我簡單說下的一些特性,算是簡單回顧,梳理下自己的知識體系。聲明的常量即不能重復賦值也不能重復聲明。如果和是同樣的命名,可以縮寫。 說起es6大家都很熟悉,有些es6新特性chrome等高級瀏覽器已經(jīng)實現(xiàn),不用我們去編譯了。今天我簡單說下es6的一些特性,算是簡單回顧,梳理下自己的知識體系。 1、聲明變量有變化,不再...
摘要:前言月份開始出沒社區(qū),現(xiàn)在差不多月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了一般來說,差不多到了轉正的時候,會進行總結或者分享會議那么今天我就把看過的一些學習資源主要是博客,博文推薦分享給大家。 1.前言 6月份開始出沒社區(qū),現(xiàn)在差不多9月了,按照工作的說法,就是差不多過了三個月的試用期,準備轉正了!一般來說,差不多到了轉正的時候,會進行總結或者分享會議!那么今天我就...
摘要:在之前,社區(qū)制定了一些模塊加載方案,最主要的有和兩種。而我們這里要說的是在使用語法引用模塊時,如何正確使用。也就是在這種不使用來引用模塊的情況下,模塊時的命名是隨意的,即如下三種引用命名都是正確的因為它總是會解析到中默認的。 在 ES6 之前,社區(qū)制定了一些模塊加載方案,最主要的有 CommonJS 和 AMD 兩種。前者用于服務器,后者用于瀏覽器。ES6 在語言標準的層面上,實現(xiàn)了模...
摘要:在誕生以前,異步編程的方式大概有下面四種回調函數(shù)事件監(jiān)聽發(fā)布訂閱對象將異步編程帶入了一個全新的階段,中的函數(shù)更是給出了異步編程的終極解決方案。這意味著,出錯的代碼與處理錯誤的代碼,實現(xiàn)了時間和空間上的分離,這對于異步編程無疑是很重要的。 寫在前面 有一個有趣的問題: 為什么Node.js約定回調函數(shù)的第一個參數(shù)必須是錯誤對象err(如果沒有錯誤,該參數(shù)就是null)? 原因是執(zhí)行回調函...
閱讀 4152·2023-04-26 02:40
閱讀 2655·2023-04-26 02:31
閱讀 2746·2021-11-15 18:08
閱讀 569·2021-11-12 10:36
閱讀 1425·2021-09-30 09:57
閱讀 5192·2021-09-22 15:31
閱讀 2626·2019-08-30 14:17
閱讀 1269·2019-08-30 12:58