對象
對象是js最重要的一個數(shù)據(jù)類型酗电,在es6中,對象的功能也得到了增強(qiáng)
對象的函數(shù)簡寫
- 對象簡寫
在es5中對象的函數(shù)寫法
const person={
getname:function(){
return '張三'
}
}
在es6中的寫法可以簡寫為
const person={
getname(){
return '張三'
}
}
并且在es6中典徊,對象中變量不可重復(fù)杭煎,不然會報錯
- 計(jì)算屬性名
var suffix = " name";
var person = {
["first" + suffix]: "Nicholas",
["last" + suffix]: "Zakas"
};
對象的增強(qiáng)
setPropertypeOf 修改原型對象
對象的原型增強(qiáng),es5中對象原型是在創(chuàng)建的過程中創(chuàng)建的卒落,es6中新增了原型的修改.以下例子,將person1對象的原型修改為person對象中
const person={
getName(name){
console.log(12)
return name;
}
}
const person1={
}
let friend=Object.create(person) // 創(chuàng)建一個對象friend羡铲,原型為person
Object.setPrototypeOf(person1,person) // 將原型設(shè)置為person
console.log(person1.getName('zhng'))
super
在es5中,調(diào)用原型的函數(shù)時儡毕,需要以以下方式
let person = {
getGreeting() {
return "Hello";
}
};
let friend = {
getGreeting() {
return Object.getPrototypeOf(this).getGreeting.call(this) + ", hi!";
}
};
// 將原型設(shè)置為 person
Object.setPrototypeOf(friend, person);
console.log(friend.getGreeting()); // "Hello,hi"
在es5中調(diào)用函數(shù)的原型主要使用Object.getPrototypeOf 來獲取對象的原型也切,call(this),是為了保證原型方法中this值的指向,在使用的過程中比較復(fù)雜妥曲。并且多層原型繼承贾费,容易出現(xiàn)this指向問題
super關(guān)鍵字用于訪問和調(diào)用一個對象的父對象上的函數(shù)。super關(guān)鍵字只能用于簡寫的函數(shù)寫法檐盟,在有function關(guān)鍵詞的函數(shù)中無效.使用super關(guān)鍵詞改寫以上的例子如下:
let person = {
getGreeting() {
return "Hello";
}
};
let friend = {
getGreeting() {
return super.getGreeting() + ", hi!";
}
};
// 將原型設(shè)置為 person
Object.setPrototypeOf(friend, person);
console.log(friend.getGreeting()); // "Hello,hi"
super關(guān)鍵詞總能指向正確的原型對象
### 新增的方法
* Object.is(obj1,obj2)
當(dāng)在 JS 中要比較兩個值時褂萧,你可能會使用相等運(yùn)算符( == )或嚴(yán)格相等運(yùn)算符( ===)。為了避免在比較時發(fā)生強(qiáng)制類型轉(zhuǎn)換葵萎,許多開發(fā)者更傾向于使用后者导犹。但嚴(yán)格相等運(yùn)算符也并不完全準(zhǔn)確,例如羡忘,它認(rèn)為 +0 與 -0 相等谎痢,即使這兩者在 JS 引擎中有不同的表示;另外 NaN === NaN 會返回 false 卷雕,因此有必要使用 isNaN() 函數(shù)來正確檢測 NaN 节猿。
因此在es6中引入了Object.is方法來彌補(bǔ)以上問題,object.is可以傳入2個參數(shù)漫雕,當(dāng)2著的值時滨嘱,返回true。否則返回false
Object.is(5, 5) //true
在許多情況下浸间, Object.is() 的結(jié)果與 === 運(yùn)算符是相同的太雨,僅有的例外是:它會認(rèn)為+0 與 -0 不相等,而且 NaN 等于 NaN 魁蒜。不過仍然沒必要停止使用嚴(yán)格相等運(yùn)算符囊扳,選擇 Object.is() 吩翻,還是選擇 == 或 === ,取決于代碼的實(shí)際情況锥咸。
* Object.assign(obj1,obj2)
將obj2對象的屬性和值合并到對象obj1中