1、箭頭函數(shù)一般是針對匿名函數(shù)來使用的喻粹,形如var fun = function(a,b,c){ }的形式蟆融,寫成var fun => (a,b,c){ }的樣式。
2守呜、函數(shù)體內(nèi)的this對象型酥,就是定義時所在的對象,而不是調(diào)用時所在的對象(以前的js語法this指向是調(diào)用它的對象)查乒。
3弥喉、擴(kuò)展運算符(...),可以用于拼接數(shù)組(a.push(...b))侣颂;解構(gòu)(let {a,b,c} = {a:1,b:2,c:3,d:4})档桃。
4、模板字符串()憔晒,模板字符串會保留換行藻肄,如果需要使用變量(${變量名})來調(diào)用。
5拒担、解構(gòu)賦值:
數(shù)組解構(gòu):let arr = [a,b,c] = [1,2,3]
對象解構(gòu):
1)嘹屯、let obj = {id,name} = {id:1,name:'小明'}
2)、let id=1从撼;let name='小明'州弟; let obj = {id,name}钧栖;即可解構(gòu)對象。
嵌套解構(gòu):let user = '';
let obj = {
id:1,
prop:[3,{name:'小明'}]
};
let objClone = {prop:[,{name:user}]} = obj;
其中user便被解構(gòu)賦值為小明了婆翔!
6拯杠、Promise對象
創(chuàng)建Promise對象
var promiseObj = new Promise(function (resolve, reject) {
setTimeout(() => {
resolve('111111');
}, 5000);
});
promiseObj.then((data) => {
console.log(data);
}).catch((error) => {
console.log(error);
});
7、async awite(異步函數(shù))
async 函數(shù)的返回值很特殊: 不管在函數(shù)體內(nèi) return 了什么值, async 函數(shù)的實際返回值總是一個 Promise 對象.
async function foo () {
var a = await new Promise((resolve) => {
setTimeout(() => {
resolve(1);
}, 2000);
});
console.log(a);
}
foo();
Promise對象會順序執(zhí)行啃奴,如下date2會等待date1執(zhí)行完畢后才會執(zhí)行潭陪,
這對于date2需要使用date1的數(shù)據(jù)的情況非常有用
async function getData () {
// 假裝請求數(shù)據(jù)1
var data1 = await new Promise((resolve) => {
setTimeout(() => {
resolve('data1');
}, 5000);
});
// 假裝請求數(shù)據(jù)2且此請求依賴數(shù)據(jù)1
return new Promise((resolve) => {
setTimeout(() => {
resolve('data2');
}, 1000);
});
}
getData().then((v) => {
console.log(v);
});
8、calss
類的初始化方法
class Person {
constructor (x, y) {
this.x = x;
this.y = y;
}
foo () {
console.log('我是類的方法最蕾!');
console.log(this.x + this.y);
return this.x + this.y;
}
}
var man = new Person(1, 2);
man.foo();
類的繼承,需要注意extends和super()關(guān)鍵字依溯;
class Teacher extends Person {
constructor (x, y, job) {
super(x, y);
this.job = job;
}
teacherfoo () {
var count = super.foo();
console.log(this.job);
}
}
var te = new Teacher(2, 3, '教師');
te.teacherfoo();
原生javascript類和繼承:
function Person(name,age){
this.name = name;
this.age = age;
this.jos = function(){
console.log('前端開發(fā)工程師');
}
}
function Man(name,age,body){
Person.call(this,name,age);//構(gòu)造函數(shù)式繼承,繼承父類的name和age
this.body = body;
this.fun = function(){
console.log('男人');
}
}
Man.prototype = new Person();//類式繼承瘟则,子類原型繼承
Man.prototype.constructor = Man;// 修正子類構(gòu)造函數(shù)的指向
9黎炉、Proxy(代理)
Proxy 可以理解成,在目標(biāo)對象之前架設(shè)一層“攔截”醋拧,外界對該對象的訪問慷嗜,都必須先通過這層攔截,因此提供了一種機(jī)制趁仙,可以對外界的訪問進(jìn)行過濾和改寫洪添。Proxy 這個詞的原意是代理,用在這里表示由它來“代理”某些操作雀费,可以譯為“代理器”。
let targetObj = {
_name:'小明',
_age:18,
score:90
};
let handlerFun = {
set:()=>{
},
get:(target,key)=>{
if(key.startsWith('_')){
console.log('私有變量');
return false;
}
return target[key];
},
};
let targetProxy = new Proxy(targetObj,handlerFun);
console.log(targetProxy._name);
console.log(targetProxy._age);
console.log(targetProxy.score);
上面的例子重寫了對象的get方法痊焊,每次在調(diào)用對象的屬性時都會經(jīng)過這個函數(shù)盏袄,以上添加的是判斷私有變量的代碼,是私有變量就會返回false薄啥。