我在对象中有所有非可枚举的属性,我想克隆该对象.
我的问题是非可枚举的属性没有得到克隆.
以下为例
Object.defineProperty(this, 'prop', {
get: function () {
return prop;
},
set: function (value) {
prop= value;
}
});
Object.defineProperty(this, 'newprop', {
get: function () {
return newprop;
},
set: function (value) {
newprop= value;
}
});
Run Code Online (Sandbox Code Playgroud)
例如,我在我的对象中有两个属性使用以下方法进行克隆,我的属性没有得到克隆我相信这是因为它们是不可枚举的.
var newObject = $.extend({},oldObject);
var newObject= Object.assign({},oldobject);
Run Code Online (Sandbox Code Playgroud)
如何在javascript中复制不可枚举的属性.
如果一个或多个属性不可枚举,您想如何自动神奇地枚举它们?
既然你知道他们的名字,你应该这样做:
var sourceObj = this;
var targetObj = {};
["prop", "otherProperty"].forEach(function(property) {
targetObj[property] = sourceObj[property];
});
Run Code Online (Sandbox Code Playgroud)
或者,只要定义了非可枚举属性,就可以构建整个属性名称数组:
var propertyNames = [];
Object.defineProperty(this, 'newprop', {
get: function () {
return newprop;
},
set: function (value) {
newprop= value;
}
});
propertyNames.push("newprop"); // <---
Object.defineProperty(this, 'newprop2', {
get: function () {
return newprop;
},
set: function (value) {
newprop= value;
}
});
propertyNames.push("newprop2"); // <---
propertyNames.forEach(function(property) {
targetObj[property] = sourceObj[property];
});
Run Code Online (Sandbox Code Playgroud)
Object.getOwnPropertyNames该
Object.getOwnPropertyNames()方法返回直接在给定对象上找到的所有属性(可枚举或不可枚举)的数组.
也许这是最好的方法.Object.getOwnPropertyNames获取自己对象属性的名称,如果它们是可枚举的.也就是说,你可以避免构建整个propertyNames数组,这种方法应该没关系,因为你说所有的属性都是不可枚举的:
var sourceObj = this;
var targetObj = {};
Object.getOwnPropertyNames(sourceObj).forEach(function(property) {
targetObj[property] = sourceObj[property];
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1163 次 |
| 最近记录: |