Object.defineProperties()
method defines new or modifies existing properties directly on an object, returning the object.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Object.defineProperties(obj, props)
obj
The object on which to define or modify properties.
props
props
must be either a data descriptor or an accessor descriptor; it cannot be both (see
Object.defineProperty()
for more details).
Data descriptors and accessor descriptors may optionally contain the following keys:
configurable
true
if and only if the type of this property descriptor may be changed and if the property may be deleted from the corresponding object.
false
.
enumerable
true
if and only if this property shows up during enumeration of the properties on the corresponding object.
false
.
A data descriptor also has the following optional keys:
value
undefined
.
writable
true
if and only if the value associated with the property may be changed with an
assignment operator
.
false
.
An accessor descriptor also has the following optional keys:
get
undefined
if there is no getter. The function's return value will be used as the value of the property.
undefined
.
set
undefined
if there is no setter. The function will receive as its only argument the new value being assigned to the property.
undefined
.
If a descriptor has neither of
value
,
writable
,
get
and
set
keys, it is treated as a data descriptor. If a descriptor has both
value
or
writable
and
get
or
set
keys, an exception is thrown.
The object that was passed to the function.
Assuming a pristine execution environment with all names and properties referring to their initial values,
Object.defineProperties
is almost completely equivalent (note the comment in
isCallable
) to the following reimplementation in JavaScript:
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;
}
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
// etc. etc.
});
| 规范 |
|---|
|
ECMAScript (ECMA-262)
The definition of 'Object.defineProperties' in that specification. |
| Desktop | Mobile | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
defineProperties
|
Chrome 5 | Edge 12 | Firefox 4 | IE 9 | Opera 11.6 | Safari 5 | WebView Android 1 | Chrome Android 18 | Firefox Android 4 | Opera Android 12 | Safari iOS 5 | Samsung Internet Android 1.0 | nodejs Yes |
完整支持
Object
Object.assign()
Object.create()
Object.defineProperties()
Object.defineProperty()
Object.entries()
Object.freeze()
Object.fromEntries()
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptors()
Object.getOwnPropertyNames()
Object.getOwnPropertySymbols()
Object.getPrototypeOf()
Object.is()
Object.isExtensible()
Object.isFrozen()
Object.isSealed()
Object.keys()
Object.preventExtensions()
Object.prototype.__defineGetter__()
Object.prototype.__defineSetter__()
Object.prototype.__lookupGetter__()
Object.prototype.__lookupSetter__()
Object.prototype.hasOwnProperty()
Object.prototype.isPrototypeOf()
Object.prototype.propertyIsEnumerable()
Object.prototype.toLocaleString()
Object.prototype.toSource()
Object.prototype.toString()
Object.prototype.valueOf()
Object.seal()
Object.setPrototypeOf()
Object.values()
Function