1. 程式人生 > >學習ES6的課堂筆記(二)

學習ES6的課堂筆記(二)

2018.10.11 星期四

複習:


一、集合:

陣列

arr = [1,2,3,2,1]

set:

無序不可重複的集合、容器
**1)例項化**
   let set = new Set();
   let set = new Set([1,2,3,3,2]);
**2)容器的增刪改查(CRUD)操作**
   set.add()   
     無法新增重複值
   set.delete()   
     要通過變數才能刪除空物件
   set.has()
     返回布林值
   set.clear() 
     清除所有成員,沒有返回值
   set.size 
     屬性,獲取集合的大小  
**3)容器的遍歷**
   for-of
   set.keys()   返回鍵名的遍歷器
   set.values()   返回鍵值的遍歷器
   set.entries()  返回鍵值對的遍歷器 
   set.forEach()  使用回撥函式遍歷每個成員 
**4)陣列去重**
  [1,2,3,3,2]->[1,2,3]

  方法1:編寫演算法
  方法2:set
    let set = new Set(arr);
    [...set]; 

map:

鍵值對集合,鍵可以為任意資料型別。
key -> val
物件 字串->值 {name:'terry'}
map  值->值  {1=>true,true->2}

Set.constructor === Map.constructor

**1)例項化**
   let map = new Map();
   let map = new Map([[1,2],[3,4],[5,6]]);
**2)容器的增刪改查操作**
   map.set(key,val)  
      key不可以重複,若重複,val會被替換
   map.delete(key)      
   map.has(key)      
   map.clear()
   map.get(key)
   map.size
**3)遍歷**
   for-of  
   map.keys()   
   map.values()   
   map.entries()
   map.forEach()       

二、Promise(ES6最核心知識)

是非同步程式設計的一種解決方案。用於封裝非同步程式碼。有以下三個狀態:

  初始化(Pending)
  成功(Resolved)
  失敗(Rejected)

resolve函式作用:初始化狀態->成功狀態
reject函式作用:初始化狀態->失敗狀態

非同步程式碼:Ajax,資料庫操作(sql),io流

1)例項化Promise物件

   let p = new Promise((resolve,reject)=>{});

2)監聽承諾物件狀態的改變

   p
   .then(()=>{//承諾兌現的時候執行})
   .catch(()=>{//承諾異常的時候執行})
   .finally(()=>{//無論如何都需要執行的程式碼})

3)promise

 let p = Promise.all([p1,p2,p3]);

將p1,p2,p3合併為一個承諾物件,當p1,p2,p3都成功的時候,p的狀態才會轉換為成功狀態。
但是如果p1,p2,p3中有一個為失敗狀態,p的狀態就轉換為失敗狀態。

 let p = Promise.race([p1,p2,p3]); 

p的狀態與p1,p2,p3中狀態改變最快的承諾物件保持一致。


  var p = new Promise((resolve,reject)=>{
     //模擬非同步
     setTimeout(()=>{
       //獲取一個隨機數
       let random = Math.random();
       if(random > 0.5){
          //成功
          resolve(random);
       }else{
          //失敗
          reject(random);
       }
     },1000);
  });
  
  p.then((data)=>{
     console.log('success:',data);
  }).catch((error)=>{
     console.log('error:',error);
  });

promise.all([p1,p2])

將陣列中的多個承諾物件合併為一個承諾物件。
用於多個請求成功。

   let p = Proise.all([p1,p2]);
   p.then(function(data){}).catch(()=>{});//data為陣列,儲存了p1,p2的返回值。只要有一個承諾失敗catch()就會執行

promise.race([p1,p2]);


底層方法:

$.ajax(url,{})
$.ajaxSetup({}) 預設

快捷方法:

    $.ajaxSetup({error:function(){}});
    $.get(url[,data][,success][,dataType]);
   =>
    $.ajax(url,{
       method:'get',
       data:{},
       success:function(){},
       error:function(){},
       complete:function(){},
       dataType:'json'
    });
    
   $.post();    
   $.getJSON();

2018.10.12 星期五

複習:


Class

一、建構函式 – 類:

function Animal(name,age){
	this.name = name;
	this.age = age;
}
Animal.prototype = {
	constructor:Animal;
	//非靜態屬性,非靜態方法
	sayName(){
	   console.log(this.name);
	},
	sayAge(){
	   console.log(this.age);
	}
}
//靜態屬性,靜態方法
Animal.nunber = 0;
Animal.sayNumber = function(){}

var a = new Animal('terry',12);
var b = new Animal)('larry',13);
a.sayName();
b.sayName();

//繼承:
   function Dog(name,age,gendeer){
       Animal.call(this,name,age);//借用建構函式
       this.gender = gender;
   }
   Dog.prototype = new Animal();
   Dog.prototype.constructor = Dog;
   Dog.sayGender = function(){
      console.log('my gender is',this.gender);
   }

   var d = new Dog('一休',1,'male');
   d.sayName();
   d.sayGender();

二、企業級應用:

class Animal {
	constructor(name,age){
	   this.name = name;
	   this.age = age;
	}
	sayName(){
	   console.log(this.name);
	}
	sayAge(){
	   console.log(this.age);
	}
	static foo(){
	   console.log();
	}
}
//繼承:
class Dog extends Animal{
	constructor(name,age,gender){
	   super(name,age);
	   this.gender = gender;
	}
	sayGender(){
	   console.log();
	}
}

var a = new Animal('terry',12);
a.sayName();
a.sayAge();
Animal.foo();

三、java:

public class Student{
	//建構函式
	public Student(String name,int age){
	      this.name = name;
	      this.age = age;
	}
	//方法
	public String getName{
	    return this.name;
	}
	public int getAge(){
	    return this.age;
	}
}
//物件
Student stu = new Student('terry',12);
stu.getName();
stu.getAge();

四、ES6中的模組化:

模組化思想用於開發階段,產品階段一般需要打包構建。

commonJS es6中的模組化機制有什麼關聯?

1.commonJS出現在es6之前,在早期使用commonJS的模組機制進行伺服器端程式設計,node對於commonJS完全支援。對es6支援程度不高。

2.es6語法簡潔,功能強大。

3.webpack打包。

1)模組定義
export不能為具體的值。export可以執行多次。

 以下示例是非法的:
     let a = 3;
     export a;
     或
     export 3;
     export 1;
  以下示例是合法的:
     export let a = 3;
     export let b = 1;
     或
     let a = 3;
     let b = 1;
     import {a:a,b:b}

2)模組的引用

   import {a,b} from './module1' 

3)export default
可以直接跟具體的值。

   export default 100;
   export default function(){}
   export default {}  

五、vue環境搭建

模組JS基礎之上 vue (資料繫結 mvvm)

  0) 所需系統:linux/os/windows

  1) nodejs8
    > node -v
    > npm -v

  2) vue腳手架(一個單獨的開發工具)
     快速建立vue工程
       企業級專案框架  
       基礎框架 src build config App.vue...
       開發環境,測試環境,打包環境
         webpack
         babel
         webpack-server
       自動化指令碼
          自動打包,部署,重新整理

       > npm install [email protected] --global
       > vue --version
       2.9.6

  3 )使用腳手架建立第一個vue專案
      > vue init webpack app01
      > cd app01
      > npm install
      > npm run dev