一次将所有对象从一个实例复制到另一个实例JavaScript

时间:2014-05-29 14:01:58

标签: javascript object expression instance override

我想知道,如何在JavaScript中制作这样的东西,或者甚至可以在其中制作这样的东西?

例如,我有:

// ps: this code is abstract and just an idea, not real one
var A = function( inputInstance ) {
    if ( inputInstance !== undefined )
        this = inputInstance;
    else 
        this = new B();
};

我对JavaScript中的这些可能或不可能的东西感兴趣,因为在各种函数式编程语言中类似的东西是可能的,例如, F#:

http://msdn.microsoft.com/en-us/library/dd233237.aspx

// This object expression specifies a System.Object but overrides the 
// ToString method.
let obj1 = { new System.Object() with member x.ToString() = "F#" }
printfn "%A" obj1

如果可以在JavaScript中实现这一点,它可能非常有用,但我认为这是不可能的,因为我不想只为一个对象副本从一个实例设置几个属性:

this.id = inputObject.id;
this.guid = inputObject.guid;
this.data = inputObject.data;
...

我不想声明inputObject的每个成员,我想将所有现有属性从一个实例设置/复制到另一个实例,只需要像F#这样的函数式语言中的一个优雅行,所以它也是如此有可能在JavaScript?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。但是,您可以使用循环。

for (var key in inputInstance) {
    // Remove this if you want to copy inherited properties too
    if (inputInstance.hasOwnProperty(key)) { 
        this[key] = inputInstance[key];
    }
}