我有
var a = {
f1: function() {
// Do Something
},
f2: ['a','b','c'],
f3: 1234
}
我需要创建像这样的东西
var b = Object.create(a);
但是b没有告诉我它包含了一个!
的任何属性答案 0 :(得分:2)
你可以创建一个克隆函数,做这样的事情:
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-loop的原因。
最后,如果使用Object.create的第二种方法在浏览器中不起作用,因为它有一个旧的JavaScript引擎,那么你必须使用一个小的解决方法,如下所示。
function F() {};
F.prototype = obj.prototype;
var cloned = new F();
希望它有所帮助! :)
答案 1 :(得分:0)
使用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
答案 2 :(得分:0)
使用JQuery的另一种方法是使用函数Jquery.extend。您可以像这样使用它:
var b = jQuery.extend({},a);