1

我有

var a = {
    f1: function() {
        // Do Something
    },
    f2: ['a','b','c'],
    f3: 1234
}

我需要创建这样的东西

var b = Object.create(a);

但是 b 并没有告诉我它包含 a 的任何属性!

4

3 回答 3

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
}

编辑:小心从原始创建克隆对象的第一条语句。

  1. 您必须注意,如果您var cloned = {};像我以前那样编写,原型会有所不同,因此此解决方案将无法 100% 正常工作,因为如果您使用instanceof运算符,它将返回false.

  2. 如果您var cloned = Object.create(obj);按照其他答案的描述使用,您将获得一个与原始原型具有相似原型的克隆对象。但是您还需要从原始对象复制属性并将它们附加到克隆版本。这就是我们必须使用 for 循环的原因。

最后,如果使用 Object.create 的第二种方法在您的浏览器中不起作用,因为它具有旧版 JavaScript 引擎,那么您必须使用如下的小解决方法。

function F() {};
F.prototype = obj.prototype;
var cloned = new F();

希望能帮助到你!:)

于 2013-02-21T12:11:59.270 回答
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

于 2013-02-21T11:48:29.477 回答
0

使用 JQuery 的另一种方法是函数Jquery.extend。你可以像这样使用它:

var b = jQuery.extend({},a);
于 2013-02-21T11:53:18.410 回答