ES6 擴(kuò)展的對(duì)象功能性

本文來(lái)自深入理解ES6

對(duì)象類別

普通對(duì)象: 具有js對(duì)象所有默認(rèn)內(nèi)部行為
特異對(duì)象: 具有某些與默認(rèn)行為不符的內(nèi)部行為
標(biāo)準(zhǔn)對(duì)象: ES6中規(guī)范定義的對(duì)象,Array,Date等
內(nèi)建對(duì)象: 腳本開始執(zhí)行時(shí)存在于JS執(zhí)行環(huán)境中的對(duì)象,所有標(biāo)準(zhǔn)對(duì)象都是內(nèi)建對(duì)象

對(duì)象字面量的擴(kuò)展

1.屬性初始值和方法的簡(jiǎn)寫

屬性初始值的簡(jiǎn)寫簡(jiǎn)單來(lái)說(shuō),就是將對(duì)象屬性賦值時(shí)候一對(duì)一的鍵值對(duì)省略冒號(hào)和值,只留下屬性名稱(鍵值對(duì)屬性名稱和函數(shù)參數(shù)相同情況下),屬性方法消除了冒號(hào)和function關(guān)鍵字。

// 屬性初始值簡(jiǎn)寫
function createPerson(name, age) {
  return {
    name,
    age,
    sayName() {
      console.log(this.name)
    }
  }
}
2.可計(jì)算的屬性名

對(duì)象的屬性可以用點(diǎn)方法和[](方括號(hào))方式來(lái)表示,如果想要通過(guò)計(jì)算的到屬性名,需要用方括號(hào)代替點(diǎn)記法。

let suffix = ' name'
let person = {
  ['first' + suffix] : 'nicholas',
  ['second' + suffix] : 'zakas'
}

console.log(person) 
結(jié)果: {first name: "nicholas", second name: "zakas"}
console.log(person['first name'])
結(jié)果: nicholas
3. Object.is()方法

Object.is()方法判斷兩個(gè)值是否相等,用來(lái)彌補(bǔ)全等運(yùn)算符中的不準(zhǔn)確計(jì)算,該方法接受兩個(gè)參數(shù),如果兩個(gè)參數(shù)類型相同,且值也相同時(shí),返回true

console.log(Object.is(+0 , -0))          //false
console.log(Object.is(5, '5'))           //false
console.log(Object.is(true, 0))          //false
console.log(Object.is(true, '0'))        //false
console.log(Object.is(NaN, NaN))         //true

Object.is()方法與==運(yùn)算符的唯一區(qū)別就是在于+0和-0被識(shí)別為不相等,NaN和NaN被認(rèn)定為相等。

4.Object.assign()方法

Object.assign()方法接受任意數(shù)量的源對(duì)象,并按制定的順序?qū)傩詮?fù)制到接收對(duì)象中,如果多個(gè)源對(duì)象具有相同的同名屬性,排位靠后的源對(duì)象會(huì)覆蓋排位靠前的屬性和方法。

//派發(fā) Object.assign()

function EventTarget() {}
EventTarget.prototype = {
  constructor: EventTarget, //構(gòu)造者
  emit: function() {
    console.log(arguments[0])
  },//派發(fā)事件
  on: function() {
    console.log(arguments[0])
  }
}

var myObject = {}
Object.assign(myObject, EventTarget.prototype);

myObject.emit('somethingChanged')
結(jié)果:somethingChanged
console.log(myObject)
結(jié)果:{constructor: ?, emit: ?, on: ?}

源對(duì)象覆蓋較前源對(duì)象屬性

let receiver = {};
Object.assign(receiver, 
  {
    type: 'js',
    name: 'file.js'
  },
  {
    type: 'css'
  }
)
console.log(receiver)
結(jié)果:VM867:12  {type: "css", name: "file.js"}
5.重復(fù)的對(duì)象字面量屬性

ES6去掉了同時(shí)出現(xiàn)多個(gè)同名屬性會(huì)拋出錯(cuò)誤這個(gè)現(xiàn)象,對(duì)于重復(fù)出現(xiàn)的屬性,最后一個(gè)值會(huì)覆蓋最前面的值。

6.自由屬性枚舉順序

自有屬性的枚舉順序的基本規(guī)則是
1.所有的數(shù)字鍵按升序排序
2.所有的字符串按照他們被加入對(duì)象的順序排序
3.所有的symbol按照他們被加入對(duì)象的順序排序

7.增強(qiáng)對(duì)象原型
①改變對(duì)象的原型

正常情況下,Object.create()方法創(chuàng)建對(duì)象,原型是在對(duì)象創(chuàng)建時(shí)指定的,對(duì)象原型在實(shí)例化之后保持不變

Object.getPrototypeOf()方法返回指定對(duì)象的原型,Object.setPrototypeOf()方法改變?nèi)我庵赶蛑付▽?duì)象的原型,接受兩個(gè)是參數(shù),被改變?cè)偷膶?duì)象及替代第一個(gè)參數(shù)原型的對(duì)象。
let person = {
  getGretting() {
    return 'hello';
  }
}
let dog = {
  getGretting() {
    return 'woof'
  }
}

let firend = Object.create(person)
console.log(firend.getGretting())
結(jié)果:VM930:13 hello
console.log(Object.is(Object.getPrototypeOf(firend), person))
結(jié)果:VM930:14 true
②簡(jiǎn)化原型范文Super引用
//Super對(duì)父類原型的訪問,在多重繼承中非常有用
let person1 = {
  getGretting() {
    return 'hello';
  }
}
let dog1 = {
  getGretting() {
    return 'woof'
  }
}
let firend1 = {
  getGretting() {
    return super.getGretting() + ',hi'
  }
}

Object.setPrototypeOf(firend1, person1)
console.log(firend1.getGretting())
結(jié)果:hello,hi
console.log(Object.is(Object.getPrototypeOf(firend1), person1))
結(jié)果:true
Object.setPrototypeOf(firend1, dog1)
console.log(firend1.getGretting())
結(jié)果:woof,hi
console.log(Object.is(Object.getPrototypeOf(firend1), person1))
結(jié)果:false
console.log(Object.is(Object.getPrototypeOf(firend1), dog1)) 
結(jié)果: true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,128評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,291評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,421評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,642評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,821評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,053評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容