摘要:方法直接在一個對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。默認(rèn)為當(dāng)且僅當(dāng)在枚舉相應(yīng)對象上的屬性時該屬性顯現(xiàn)。函數(shù)返回值將被用作屬性的值。默認(rèn)為返回值傳遞給函數(shù)的對象。
Object.defineProperties()
Object.defineProperties() 方法直接在一個對象上定義新的屬性或修改現(xiàn)有屬性,并返回該對象。
語法Object.defineProperties(obj, props)
參數(shù)obj
在其上定義或修改屬性的對象。
props
要定義其可枚舉屬性或修改的屬性描述符的對象。對象中存在的屬性描述符主要有兩種:數(shù)據(jù)描述符和訪問器描述符(更多詳情,請參閱Object.defineProperty())。描述符具有以下鍵:
configurable
true 當(dāng)且僅當(dāng)該屬性描述符的類型可以被改變并且該屬性可以從對應(yīng)對象中刪除。默認(rèn)為 false
enumerable
true 當(dāng)且僅當(dāng)在枚舉相應(yīng)對象上的屬性時該屬性顯現(xiàn)。默認(rèn)為 false
value
與屬性關(guān)聯(lián)的值。可以是任何有效的JavaScript值(數(shù)字,對象,函數(shù)等)。默認(rèn)為 undefined.
writable
true當(dāng)且僅當(dāng)與該屬性相關(guān)聯(lián)的值可以用assignment operator改變時。默認(rèn)為 false
get
作為該屬性的 getter 函數(shù),如果沒有 getter 則為undefined。函數(shù)返回值將被用作屬性的值。默認(rèn)為 undefined
set
作為屬性的 setter 函數(shù),如果沒有 setter 則為undefined。函數(shù)將僅接受參數(shù)賦值給該屬性的新值。默認(rèn)為 undefined
傳遞給函數(shù)的對象。
描述Object.defineProperties本質(zhì)上定義了obj 對象上props的可枚舉屬性相對應(yīng)的所有屬性。
例子var obj = {}; Object.defineProperties(obj, { "property1": { value: true, writable: true }, "property2": { value: "Hello", writable: false } // etc. etc. });Polyfill
假設(shè)一個原始的執(zhí)行環(huán)境,所有的名稱和屬性都引用它們的初始值,Object.defineProperties幾乎完全等同于(注意isCallable中的注釋)以下JavaScript中的重新實現(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)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/89131.html
摘要:深入理解中的屬性和特性中屬性和特性是完全不同的兩個概念,這里我將根據(jù)自己所學(xué),來深入理解中的屬性和特性。其中第三個參數(shù)描述符對象是對象字面量的方法創(chuàng)建的,里面的屬性和屬性值實際上保存的是要修改的特性和特性值。 深入理解JavaScript中的屬性和特性 JavaScript中屬性和特性是完全不同的兩個概念,這里我將根據(jù)自己所學(xué),來深入理解JavaScript中的屬性和特性。 主...
摘要:語法新創(chuàng)建對象的原型對象。返回值在指定原型對象上添加新屬性后的對象。例外如果參數(shù)不是或一個對象,則拋出一個異常。是在引入的,且可用。請注意,盡管在中支持設(shè)置為為,但因為那些以前版本限制,此無法支持該特性。 Object.create() Object.create() 方法會使用指定的原型對象及其屬性去創(chuàng)建一個新的對象。 語法 Object.create(proto[, propert...
摘要:先搜索全局符號注冊表,如果已有,則返回這個已存在的符號值否則,會創(chuàng)建一個新的符號值,并使用該鍵值將其記錄到全局符號注冊表中,然后返回這個新的符號值。 主要知識點:創(chuàng)建符號值、使用符號值、共享符號值、符號值轉(zhuǎn)換。檢索符號值屬性以及知名符號 showImg(https://segmentfault.com/img/bVbfWhK?w=1203&h=633); 《深入理解ES6》筆記 目錄 ...
摘要:返回值是一個對象,如果是訪問器屬性,這個對象的屬性有和如果是數(shù)據(jù)屬性,這個對象的屬性有和。上一篇面向?qū)ο蟀鎵K之對象屬性下一篇面向?qū)ο蟀鎵K之創(chuàng)建對象 這是 javascript 面向?qū)ο蟀鎵K的第三篇文章,主要講解的是多個屬性的定義以及讀取屬性的特性。前面這幾章內(nèi)容目的在于加深對對象的理解,這樣可以利于理解后面的原型鏈以及繼承方面的知識,或者你也可以了解一下不一樣的 javascript ...
摘要:屬性是函數(shù)獨有的,表明該對象可以被執(zhí)行。李四張三張三李四李四李四張三屬性探測由于屬性可以在任何時候添加,所以有時候就有必要檢查對象是否已有一個屬性。張三屬性特征通過方法來改變屬性特征。 1.[[Call]]屬性是函數(shù)獨有的,表明該對象可以被執(zhí)行。由于僅函數(shù)擁有該對象,ECMAScript定義typeof操作符對任何具有[[Call]]屬性的對象返回function。 注:某些瀏覽器曾經(jīng)...
閱讀 1904·2021-11-09 09:46
閱讀 2486·2019-08-30 15:52
閱讀 2445·2019-08-30 15:47
閱讀 1320·2019-08-29 17:11
閱讀 1746·2019-08-29 15:24
閱讀 3501·2019-08-29 14:02
閱讀 2442·2019-08-29 13:27
閱讀 1199·2019-08-29 12:32