對(duì)象常用api

Object.assign(target, ...sources)

Object.assign() 方法用于將所有可枚舉屬性的值從一個(gè)或多個(gè)源對(duì)象復(fù)制到目標(biāo)對(duì)象。它將返回目標(biāo)對(duì)象臼隔。如果目標(biāo)對(duì)象中的屬性具有相同的鍵潘明,則屬性將被源中的屬性覆蓋锄弱。后來(lái)的源的屬性將類(lèi)似地覆蓋早先的屬性。
target目標(biāo)對(duì)象。
sources源對(duì)象。

var o1 = { a: 1 };
var o2 = { b: 2 };
var o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1);  // { a: 1, b: 2, c: 3 }, 第一個(gè)參數(shù)注意目標(biāo)對(duì)象自身也會(huì)改變闯捎。

Object.create(proto, [propertiesObject])

proto新創(chuàng)建對(duì)象的原型對(duì)象。
propertiesObject可選许溅。如果沒(méi)有指定為 undefined瓤鼻,則是要添加到新創(chuàng)建對(duì)象的可枚舉屬性(即其自身定義的屬性,而不是其原型鏈上的枚舉屬性)對(duì)象的屬性描述符以及相應(yīng)的屬性名稱(chēng)贤重。這些屬性對(duì)應(yīng)Object.defineProperties()的第二個(gè)參數(shù)茬祷。

用 Object.create實(shí)現(xiàn)類(lèi)式繼承
下面的例子演示了如何使用Object.create()來(lái)實(shí)現(xiàn)類(lèi)式繼承。這是一個(gè)所有版本JavaScript都支持的單繼承并蝗。

// Shape - 父類(lèi)(superclass)
function Shape() {
  this.x = 0;
  this.y = 0;
}

// 父類(lèi)的方法
Shape.prototype.move = function(x, y) {
  this.x += x;
  this.y += y;
  console.info('Shape moved.');
};

// Rectangle - 子類(lèi)(subclass)
function Rectangle() {
  Shape.call(this); // call super constructor.
}

// 子類(lèi)續(xù)承父類(lèi)
Rectangle.prototype = Object.create(Shape.prototype);
Rectangle.prototype.constructor = Rectangle;

var rect = new Rectangle();

console.log('Is rect an instance of Rectangle?',
  rect instanceof Rectangle); // true
console.log('Is rect an instance of Shape?',
  rect instanceof Shape); // true
rect.move(1, 1); // Outputs, 'Shape moved.'

Object.defineProperty(obj, prop, descriptor)

obj要在其上定義屬性的對(duì)象祭犯。
prop要定義或修改的屬性的名稱(chēng)。
descriptor將被定義或修改的屬性描述符滚停。
configurable
當(dāng)且僅當(dāng)該屬性的 configurable 為 true 時(shí)沃粗,該屬性描述符才能夠被改變,同時(shí)該屬性也能從對(duì)應(yīng)的對(duì)象上被刪除铐刘。默認(rèn)為 false。
enumerable
當(dāng)且僅當(dāng)該屬性的enumerable為true時(shí)影晓,該屬性才能夠出現(xiàn)在對(duì)象的枚舉屬性中镰吵。默認(rèn)為 false檩禾。
數(shù)據(jù)描述符同時(shí)具有以下可選鍵值:
value
該屬性對(duì)應(yīng)的值“碳溃可以是任何有效的 JavaScript 值(數(shù)值盼产,對(duì)象,函數(shù)等)勺馆。默認(rèn)為 undefined戏售。
writable
當(dāng)且僅當(dāng)該屬性的writable為true時(shí),value才能被賦值運(yùn)算符改變草穆。默認(rèn)為 false灌灾。
存取描述符同時(shí)具有以下可選鍵值:

get
一個(gè)給屬性提供 getter 的方法,如果沒(méi)有 getter 則為 undefined悲柱。該方法返回值被用作屬性值锋喜。默認(rèn)為 undefined。
set
一個(gè)給屬性提供 setter 的方法豌鸡,如果沒(méi)有 setter 則為 undefined嘿般。該方法將接受唯一參數(shù),并將該參數(shù)的新值分配給該屬性涯冠。默認(rèn)為 undefined炉奴。

var o = {}; // 創(chuàng)建一個(gè)新對(duì)象
// 在對(duì)象中添加一個(gè)屬性與數(shù)據(jù)描述符的示例
Object.defineProperty(o, "a", {
  value : 37,
  writable : true,
  enumerable : true,
  configurable : true
});

Object.defineProperties(obj, props)

方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象蛇更。

var obj = {};
Object.defineProperties(obj, {
  'property1': {
    value: true,
    writable: true
  },
  'property2': {
    value: 'Hello',
    writable: false
  }
  // etc. etc.
});

Object.entries()

Object.entries()方法返回一個(gè)給定對(duì)象自身可枚舉屬性的鍵值對(duì)數(shù)組瞻赶,其排列與使用 for...in 循環(huán)遍歷該對(duì)象時(shí)返回的順序一致(區(qū)別在于 for-in 循環(huán)也枚舉原型鏈中的屬性)。

const object1 = { foo: 'bar', baz: 42 };
console.log(Object.entries(object1)[1]);
console.log(Object.entries(object1));
// expected output: Array ["baz", 42]
// expected output: Array [ ["foo", "bar"],["baz", 42]]

const object2 = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.entries(object2)[2]);
// expected output: Array ["2", "c"]

const object3 = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.entries(object3)[0]);
// expected output: Array ["2", "b"]

Object.keys(obj)

返回鍵名組成的數(shù)組,不返回原型鏈上的可枚舉屬性械荷。

Object.freeze()

可以?xún)鼋Y(jié)一個(gè)對(duì)象共耍,凍結(jié)指的是不能向這個(gè)對(duì)象添加新的屬性,不能修改其已有屬性的值吨瞎,不能刪除已有屬性痹兜,以及不能修改該對(duì)象已有屬性的可枚舉性、可配置性颤诀、可寫(xiě)性字旭。也就是說(shuō),這個(gè)對(duì)象永遠(yuǎn)是不可變的崖叫。該方法返回被凍結(jié)的對(duì)象遗淳。

Object.seal()

不能加新值,可以改舊值心傀。

Object.getOwnPropertyDescriptor(obj, prop)

方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符屈暗。(自有屬性指的是直接賦予該對(duì)象的屬性,不需要從原型鏈上進(jìn)行查找的屬性)

var o, d;

o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, "foo");
// d {
//   configurable: true,
//   enumerable: true,
//   get: /*the getter function*/,
//   set: undefined
// }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
// d {
//   configurable: true,
//   enumerable: true,
//   value: 42,
//   writable: true
// }

Object.getOwnPropertyDescriptors(obj)

用來(lái)獲取一個(gè)對(duì)象的所有自身屬性的描述符。

Object.getOwnPropertyNames(obj)

返回一個(gè)由指定對(duì)象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱(chēng)的屬性)組成的數(shù)組养叛。


Object.getPrototypeOf(obj)

返回指定對(duì)象的原型(內(nèi)部[[Prototype]]屬性的值)种呐。

obj.hasOwnProperty(prop)

會(huì)返回一個(gè)布爾值,指示對(duì)象自身屬性中是否具有指定的屬性弃甥。

prototypeObj.isPrototypeOf(object)

object在該對(duì)象的原型鏈上搜尋
返回值Boolean爽室,表示調(diào)用對(duì)象是否在另一個(gè)對(duì)象的原型鏈上。
peObj 為 undefined 或 null淆攻,會(huì)拋出 TypeError阔墩。

Object.values(obj)

返回一個(gè)數(shù)組,其元素是在對(duì)象上找到的可枚舉屬性值瓶珊。屬性的順序與通過(guò)手動(dòng)循環(huán)對(duì)象的屬性值所給出的順序相同啸箫。

var obj = { foo: "bar", baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

// 類(lèi)數(shù)組對(duì)象
var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
注意:
var obj = { 0: 'a', 1: 'b', 2: { 3: 'c' , 4: 'd' } };
console.log(Object.values(obj));  
// ["a", "b", {…}] 內(nèi)置的對(duì)象沒(méi)有擴(kuò)展成數(shù)組

// 隨機(jī)鍵值的類(lèi)數(shù)組對(duì)象
var an_obj = { 100: 'a', 2: 'b', 7: 'c' };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']

// getFoo 是不可枚舉屬性
var my_obj = Object.create({}, { getFoo: { value: function() { return this.foo; } } });
my_obj.foo = "bar";
console.log(Object.values(my_obj)); // ['bar']

// 參數(shù)是非對(duì)象會(huì)轉(zhuǎn)變成對(duì)象
console.log(Object.values("foo")); // ['f', 'o', 'o']
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艰毒,一起剝皮案震驚了整個(gè)濱河市筐高,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丑瞧,老刑警劉巖柑土,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異绊汹,居然都是意外死亡稽屏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)西乖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)狐榔,“玉大人,你說(shuō)我怎么就攤上這事获雕”∧澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵届案,是天一觀的道長(zhǎng)庵楷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)楣颠,這世上最難降的妖魔是什么尽纽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮童漩,結(jié)果婚禮上弄贿,老公的妹妹穿的比我還像新娘。我一直安慰自己矫膨,他們只是感情好差凹,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布期奔。 她就那樣靜靜地躺著,像睡著了一般危尿。 火紅的嫁衣襯著肌膚如雪能庆。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天脚线,我揣著相機(jī)與錄音,去河邊找鬼弥搞。 笑死邮绿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攀例。 我是一名探鬼主播船逮,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粤铭!你這毒婦竟也來(lái)了挖胃?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梆惯,失蹤者是張志新(化名)和其女友劉穎酱鸭,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體垛吗,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凹髓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了怯屉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔚舀。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锨络,靈堂內(nèi)的尸體忽然破棺而出赌躺,到底是詐尸還是另有隱情,我是刑警寧澤羡儿,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布礼患,位于F島的核電站,受9級(jí)特大地震影響失受,放射性物質(zhì)發(fā)生泄漏讶泰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一拂到、第九天 我趴在偏房一處隱蔽的房頂上張望痪署。 院中可真熱鬧,春花似錦兄旬、人聲如沸狼犯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悯森。三九已至宋舷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瓢姻,已是汗流浹背祝蝠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幻碱,地道東北人绎狭。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像褥傍,于是被迫代替她去往敵國(guó)和親儡嘶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

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

  • 第3章 基本概念 3.1 語(yǔ)法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類(lèi)型 5種簡(jiǎn)單數(shù)據(jù)類(lèi)型:Unde...
    RickCole閱讀 5,128評(píng)論 0 21
  • 函數(shù)和對(duì)象 1恍风、函數(shù) 1.1 函數(shù)概述 函數(shù)對(duì)于任何一門(mén)語(yǔ)言來(lái)說(shuō)都是核心的概念蹦狂。通過(guò)函數(shù)可以封裝任意多條語(yǔ)句,而且...
    道無(wú)虛閱讀 4,564評(píng)論 0 5
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)朋贬,也就是一...
    悟名先生閱讀 4,149評(píng)論 0 13
  • 最近一年的自己凯楔,給自己定了些計(jì)劃,一直看著計(jì)劃每天都不松懈的生活锦募,像是過(guò)成了機(jī)器人~~~ 有天的下午啼辣,...
    燁子cai閱讀 232評(píng)論 0 0
  • 今天陪老爸老媽逛了大半天商場(chǎng)削解,不知為何回到家后對(duì)鍛煉身體和今晚的寫(xiě)作50字提不起精神富弦,內(nèi)心的那個(gè)消極懶惰的潛意識(shí)思...
    民哥_財(cái)富教練閱讀 233評(píng)論 1 2