我有
var a = {
f1: function() {
// Do Something
},
f2: ['a','b','c'],
f3: 1234
}
我需要创建这样的东西
var b = Object.create(a);
但是 b 并没有告诉我它包含 a 的任何属性!
我有
var a = {
f1: function() {
// Do Something
},
f2: ['a','b','c'],
f3: 1234
}
我需要创建这样的东西
var b = Object.create(a);
但是 b 并没有告诉我它包含 a 的任何属性!
您可以创建一个克隆函数,执行如下操作:
var clone = function(obj) {
// Create a new object using the same prototype as the original object
var cloned = Object.create(obj);
// Copy each property from 'obj' to 'cloned'
for (p in obj) {
if (obj.hasOwnProperty(p)) {
cloned[p] = obj[p];
}
}
return cloned; // Return the cloned object
}
编辑:小心从原始创建克隆对象的第一条语句。
您必须注意,如果您var cloned = {};
像我以前那样编写,原型会有所不同,因此此解决方案将无法 100% 正常工作,因为如果您使用instanceof
运算符,它将返回false
.
如果您var cloned = Object.create(obj);
按照其他答案的描述使用,您将获得一个与原始原型具有相似原型的克隆对象。但是您还需要从原始对象复制属性并将它们附加到克隆版本。这就是我们必须使用 for 循环的原因。
最后,如果使用 Object.create 的第二种方法在您的浏览器中不起作用,因为它具有旧版 JavaScript 引擎,那么您必须使用如下的小解决方法。
function F() {};
F.prototype = obj.prototype;
var cloned = new F();
希望能帮助到你!:)
使用prototype
:
var b = Object.create(a.prototype);
Object.create
使用指定的原型对象和属性创建一个新对象。
它期望新创建的对象的原型:Object.create(proto [, propertiesObject ])
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create
使用 JQuery 的另一种方法是函数Jquery.extend。你可以像这样使用它:
var b = jQuery.extend({},a);