Object.defineProperties参数介绍
The Object.defineProperties()
method defines new or modifies existing properties directly on an object, returning the object.
Syntax
Object.defineProperties(obj, props)
Parameters
-
obj
- The object on which to define or modify properties.
-
props
-
An object whose own enumerable properties constitute descriptors for the properties to be defined or modified. Properties have the following optional 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.
Defaults tofalse
. -
enumerable
-
true
if and only if this property shows up during enumeration of the properties on the corresponding object.
Defaults tofalse
.
-
value
-
The value associated with the property. Can be any valid JavaScript value (number, object, function, etc).
Defaults toundefined
. -
writable
-
true
if and only if the value associated with the property may be changed with an assignment operator.
Defaults tofalse
.
-
get
-
A function which serves as a getter for the property, or
undefined
if there is no getter. The function return will be used as the value of property.
Defaults toundefined
. -
set
-
A function which serves as a setter for the property, or
undefined
if there is no setter. The function will receive as only argument the new value being assigned to the property.
Defaults toundefined
.
-
Description
Object.defineProperties
, in essence, defines all properties corresponding to the enumerable own properties of props
on the object obj
object.
Example
var obj = {};
Object.defineProperties(obj, {
"property1": {
value: true,
writable: true
},
"property2": {
value: "Hello",
writable: false
}
// etc. etc.
});
Polyfill
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 = !!obj.enumerable;
if (hasProperty(desc, "configurable"))
d.configurable = !!obj.configurable;
if (hasProperty(desc, "value"))
d.value = obj.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;
}
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 5.1 (ECMA-262) The definition of 'Object.defineProperties' in that specification. | Standard | Initial definition. Implemented in JavaScript 1.8.5 |
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Object.defineProperties' in that specification. | Standard |
Browser compatibility
See also
加支付宝好友偷能量挖...
原创文章,转载请注明出处:Object.defineProperties参数介绍