摘要:方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象。默認(rèn)為當(dāng)且僅當(dāng)在枚舉相應(yīng)對(duì)象上的屬性時(shí)該屬性顯現(xiàn)。函數(shù)返回值將被用作屬性的值。默認(rèn)為返回值傳遞給函數(shù)的對(duì)象。
Object.defineProperties()
Object.defineProperties() 方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象。
語(yǔ)法Object.defineProperties(obj, props)
參數(shù)obj
在其上定義或修改屬性的對(duì)象。
props
要定義其可枚舉屬性或修改的屬性描述符的對(duì)象。對(duì)象中存在的屬性描述符主要有兩種:數(shù)據(jù)描述符和訪問(wèn)器描述符(更多詳情,請(qǐng)參閱Object.defineProperty())。描述符具有以下鍵:
configurable
true 當(dāng)且僅當(dāng)該屬性描述符的類型可以被改變并且該屬性可以從對(duì)應(yīng)對(duì)象中刪除。默認(rèn)為 false
enumerable
true 當(dāng)且僅當(dāng)在枚舉相應(yīng)對(duì)象上的屬性時(shí)該屬性顯現(xiàn)。默認(rèn)為 false
value
與屬性關(guān)聯(lián)的值??梢允侨魏斡行У腏avaScript值(數(shù)字,對(duì)象,函數(shù)等)。默認(rèn)為 undefined.
writable
true當(dāng)且僅當(dāng)與該屬性相關(guān)聯(lián)的值可以用assignment operator改變時(shí)。默認(rèn)為 false
get
作為該屬性的 getter 函數(shù),如果沒有 getter 則為undefined。函數(shù)返回值將被用作屬性的值。默認(rèn)為 undefined
set
作為屬性的 setter 函數(shù),如果沒有 setter 則為undefined。函數(shù)將僅接受參數(shù)賦值給該屬性的新值。默認(rèn)為 undefined
傳遞給函數(shù)的對(duì)象。
描述Object.defineProperties本質(zhì)上定義了obj 對(duì)象上props的可枚舉屬性相對(duì)應(yīng)的所有屬性。
例子var obj = {}; Object.defineProperties(obj, { "property1": { value: true, writable: true }, "property2": { value: "Hello", writable: false } // etc. etc. });Polyfill
假設(shè)一個(gè)原始的執(zhí)行環(huán)境,所有的名稱和屬性都引用它們的初始值,Object.defineProperties幾乎完全等同于(注意isCallable中的注釋)以下JavaScript中的重新實(shí)現(xiàn):
function defineProperties(obj, properties) { function convertToDescriptor(desc) { function hasProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } function isCallable(v) { // NB: modify as necessary if other values than functions are callable. return typeof v === "function"; } if (typeof desc !== "object" || desc === null) throw new TypeError("bad desc"); var d = {}; if (hasProperty(desc, "enumerable")) d.enumerable = !!desc.enumerable; if (hasProperty(desc, "configurable")) d.configurable = !!desc.configurable; if (hasProperty(desc, "value")) d.value = desc.value; if (hasProperty(desc, "writable")) d.writable = !!desc.writable; if (hasProperty(desc, "get")) { var g = desc.get; if (!isCallable(g) && typeof g !== "undefined") throw new TypeError("bad get"); d.get = g; } if (hasProperty(desc, "set")) { var s = desc.set; if (!isCallable(s) && typeof s !== "undefined") throw new TypeError("bad set"); d.set = s; } if (("get" in d || "set" in d) && ("value" in d || "writable" in d)) throw new TypeError("identity-confused descriptor"); return d; } if (typeof obj !== "object" || obj === null) throw new TypeError("bad obj"); properties = Object(properties); var keys = Object.keys(properties); var descs = []; for (var i = 0; i < keys.length; i++) descs.push([keys[i], convertToDescriptor(properties[keys[i]])]); for (var i = 0; i < descs.length; i++) Object.defineProperty(obj, descs[i][0], descs[i][1]); return obj; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/89131.html
摘要:深入理解中的屬性和特性中屬性和特性是完全不同的兩個(gè)概念,這里我將根據(jù)自己所學(xué),來(lái)深入理解中的屬性和特性。其中第三個(gè)參數(shù)描述符對(duì)象是對(duì)象字面量的方法創(chuàng)建的,里面的屬性和屬性值實(shí)際上保存的是要修改的特性和特性值。 深入理解JavaScript中的屬性和特性 JavaScript中屬性和特性是完全不同的兩個(gè)概念,這里我將根據(jù)自己所學(xué),來(lái)深入理解JavaScript中的屬性和特性。 主...
摘要:語(yǔ)法新創(chuàng)建對(duì)象的原型對(duì)象。返回值在指定原型對(duì)象上添加新屬性后的對(duì)象。例外如果參數(shù)不是或一個(gè)對(duì)象,則拋出一個(gè)異常。是在引入的,且可用。請(qǐng)注意,盡管在中支持設(shè)置為為,但因?yàn)槟切┮郧鞍姹鞠拗?,此無(wú)法支持該特性。 Object.create() Object.create() 方法會(huì)使用指定的原型對(duì)象及其屬性去創(chuàng)建一個(gè)新的對(duì)象。 語(yǔ)法 Object.create(proto[, propert...
摘要:先搜索全局符號(hào)注冊(cè)表,如果已有,則返回這個(gè)已存在的符號(hào)值否則,會(huì)創(chuàng)建一個(gè)新的符號(hào)值,并使用該鍵值將其記錄到全局符號(hào)注冊(cè)表中,然后返回這個(gè)新的符號(hào)值。 主要知識(shí)點(diǎn):創(chuàng)建符號(hào)值、使用符號(hào)值、共享符號(hào)值、符號(hào)值轉(zhuǎn)換。檢索符號(hào)值屬性以及知名符號(hào) showImg(https://segmentfault.com/img/bVbfWhK?w=1203&h=633); 《深入理解ES6》筆記 目錄 ...
摘要:返回值是一個(gè)對(duì)象,如果是訪問(wèn)器屬性,這個(gè)對(duì)象的屬性有和如果是數(shù)據(jù)屬性,這個(gè)對(duì)象的屬性有和。上一篇面向?qū)ο蟀鎵K之對(duì)象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對(duì)象 這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個(gè)屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對(duì)對(duì)象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識(shí),或者你也可以了解一下不一樣的 javascript ...
摘要:屬性是函數(shù)獨(dú)有的,表明該對(duì)象可以被執(zhí)行。李四張三張三李四李四李四張三屬性探測(cè)由于屬性可以在任何時(shí)候添加,所以有時(shí)候就有必要檢查對(duì)象是否已有一個(gè)屬性。張三屬性特征通過(guò)方法來(lái)改變屬性特征。 1.[[Call]]屬性是函數(shù)獨(dú)有的,表明該對(duì)象可以被執(zhí)行。由于僅函數(shù)擁有該對(duì)象,ECMAScript定義typeof操作符對(duì)任何具有[[Call]]屬性的對(duì)象返回function。 注:某些瀏覽器曾經(jīng)...
閱讀 1971·2021-11-09 09:46
閱讀 2553·2019-08-30 15:52
閱讀 2522·2019-08-30 15:47
閱讀 1393·2019-08-29 17:11
閱讀 1793·2019-08-29 15:24
閱讀 3562·2019-08-29 14:02
閱讀 2511·2019-08-29 13:27
閱讀 1267·2019-08-29 12:32