如何从现有JS对象实例化相同的JS对象

时间:2013-02-21 11:47:45

标签: javascript

我有

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

我需要创建像这样的东西

var b = Object.create(a);

但是b没有告诉我它包含了一个!

的任何属性

3 个答案:

答案 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
}

编辑:请小心使用第一条语句从原始文件创建克隆对象。

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

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

  3. 最后,如果使用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);