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ì)象: 腳本開(kāi)始執(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ì)父類原型的訪問(wèn),在多重繼承中非常有用
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)系作者
  • 序言:七十年代末右犹,一起剝皮案震驚了整個(gè)濱河市提澎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌念链,老刑警劉巖盼忌,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異掂墓,居然都是意外死亡谦纱,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門梆暮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)服协,“玉大人,你說(shuō)我怎么就攤上這事啦粹〕ズ桑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵唠椭,是天一觀的道長(zhǎng)跳纳。 經(jīng)常有香客問(wèn)我,道長(zhǎng)贪嫂,這世上最難降的妖魔是什么寺庄? 我笑而不...
    開(kāi)封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上斗塘,老公的妹妹穿的比我還像新娘赢织。我一直安慰自己,他們只是感情好馍盟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布于置。 她就那樣靜靜地躺著,像睡著了一般贞岭。 火紅的嫁衣襯著肌膚如雪八毯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天瞄桨,我揣著相機(jī)與錄音话速,去河邊找鬼。 笑死芯侥,一個(gè)胖子當(dāng)著我的面吹牛泊交,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筹麸,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼活合,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼雏婶!你這毒婦竟也來(lái)了物赶?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤留晚,失蹤者是張志新(化名)和其女友劉穎酵紫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體错维,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奖地,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赋焕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片参歹。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隆判,靈堂內(nèi)的尸體忽然破棺而出犬庇,到底是詐尸還是另有隱情,我是刑警寧澤侨嘀,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布臭挽,位于F島的核電站,受9級(jí)特大地震影響咬腕,放射性物質(zhì)發(fā)生泄漏欢峰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纽帖。 院中可真熱鬧宠漩,春花似錦、人聲如沸懊直。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吹截。三九已至瘦陈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間波俄,已是汗流浹背晨逝。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懦铺,地道東北人捉貌。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像冬念,于是被迫代替她去往敵國(guó)和親趁窃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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