5.對(duì)象的擴(kuò)展

屬性與方法的簡潔表示法

var birth = '2000/01/01';
var Person = { 
   name: '張三', 
   //等同于birth: birth 
   birth,  
   // 等同于hello: function ()...
   hello() { console.log('我的名字是', this.name); }
};

//返回值的簡寫
function getPoint() {
   var x = 1; var y = 10; 
   return {x, y};
}
getPoint()
// {x:1, y:10}

//commonjs變量輸出
module.exports = { getItem, setItem, clear };
// 等同于
module.exports = {
 getItem: getItem, 
 setItem: setItem, 
clear: clear
};

//get set的寫法
var cart = { 
  _wheels: 4, 
  get wheels () { return this._wheels; }, 
  set wheels (value) {
    if (value < this._wheels) {
      throw new Error('數(shù)值太小了比规!'); 
     }
   this._wheels = value; 
  }
}

屬性表達(dá)()

var lastWord = 'last word';
var a = {
 'first word': 'hello', 
[lastWord]: 'world'};
a['first word'] // "hello"
a[lastWord] // "world"
//好怪
a['last word'] // "world"

Object.is()

用于比較兩個(gè)值是否相等

+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true

自行實(shí)現(xiàn)盯桦,可采用如下代碼

Object.defineProperty(Object, 'is', { 
  value: function(x, y) {
   if (x === y) {  
  // 針對(duì)+0 不等于 -0的情況 
    return x !== 0 || 1 / x === 1 / y; 
  }  
  // 針對(duì)NaN的情況
  return x !== x && y !== y;
 }, 
   configurable: true, 
   enumerable: false,
   writable: true}
);

Object.assign()

用于對(duì)象的合并壮不,將源對(duì)象(source)的所有可枚舉屬性,復(fù)制到目標(biāo)對(duì)象(target)。如果目標(biāo)對(duì)象與源對(duì)象有同名屬性,或多個(gè)源對(duì)象有同名屬性叮叹,則后面的屬性會(huì)覆蓋前面的屬性。

var target = { a: 1, b: 1 };
var source1 = { b: 2, c: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

如果該參數(shù)不是對(duì)象爆存,則會(huì)先轉(zhuǎn)成對(duì)象蛉顽,然后返回。

typeof Object.assign(2)

Object.assign拷貝的屬性是有限制的先较,只拷貝源對(duì)象的自身屬性(不拷貝繼承屬性)蜂林,也不拷貝不可枚舉的屬性(enumerable: false)。

常見用途:
  • 為對(duì)象添加屬性
class Point { 
    constructor(x, y) { 
      Object.assign(this, {x, y}); 
    }
}
  • 為對(duì)象添加方法
Object.assign(SomeClass.prototype, { 
  someMethod(arg1, arg2) { ··· },
   anotherMethod() { ··· }
});
// 等同于下面的寫法
SomeClass.prototype.someMethod = function (arg1, arg2) { ···};
SomeClass.prototype.anotherMethod = function () { ···};
  • 克隆對(duì)象
function clone(origin) { return Object.assign({}, origin);}

采用這種方法克隆拇泣,只能克隆原始對(duì)象自身的值噪叙,不能克隆它繼承的值。如果想要保持繼承鏈霉翔,可以采用下面的代碼睁蕾。

function clone(origin) {
   let originProto = Object.getPrototypeOf(origin);
   return Object.assign(Object.create(originProto), origin);
}
  • 合并多個(gè)對(duì)象
const merge = (target, ...sources) => Object.assign(target, ...sources);
  • 為屬性指定默認(rèn)值
const DEFAULTS = { logLevel: 0, outputFormat: 'html'};
function processContent(options) { 
      options = Object.assign({}, DEFAULTS, options);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市债朵,隨后出現(xiàn)的幾起案子子眶,更是在濱河造成了極大的恐慌,老刑警劉巖序芦,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臭杰,死亡現(xiàn)場離奇詭異,居然都是意外死亡谚中,警方通過查閱死者的電腦和手機(jī)渴杆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宪塔,“玉大人磁奖,你說我怎么就攤上這事∧晨穑” “怎么了比搭?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長南誊。 經(jīng)常有香客問我身诺,道長,這世上最難降的妖魔是什么抄囚? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任霉赡,我火速辦了婚禮,結(jié)果婚禮上怠苔,老公的妹妹穿的比我還像新娘同廉。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布迫肖。 她就那樣靜靜地躺著锅劝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蟆湖。 梳的紋絲不亂的頭發(fā)上故爵,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音隅津,去河邊找鬼诬垂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛伦仍,可吹牛的內(nèi)容都是我干的结窘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼充蓝,長吁一口氣:“原來是場噩夢啊……” “哼隧枫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谓苟,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤官脓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后涝焙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卑笨,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年仑撞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赤兴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡派草,死狀恐怖搀缠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情近迁,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布簸州,位于F島的核電站鉴竭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岸浑。R本人自食惡果不足惜搏存,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望矢洲。 院中可真熱鬧璧眠,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至灾螃,卻和暖如春题翻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腰鬼。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工嵌赠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熄赡。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓姜挺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彼硫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炊豪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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