在不克隆对象的情况下将参数转换为新的对象参数?

时间:2014-02-13 03:09:59

标签: javascript

我想用'arguments'创建一个带有参数的新对象,但我不知道 如何甚至可以直接转换它而不进行克隆。以下是使用克隆的可能性:

function theClass(name, whatever) {
        this.name = name;
        this.whatever = whatever;
    }

// I need to use the arguments passed from this function but without using clone
// as shown.
function doSomething()
{
    function clone(args) {
        theClass.apply(this, args);
    }

    clone.prototype = theClass.prototype;

    return new clone(arguments);
}

// Usage expectation.
var myNewObject = doSomething("Honda", "motorbike");

console.log(myNewObject.name);

但是,这会影响性能,因为每次调用doSomething时,都必须创建一个克隆,以便传递要从该类应用的参数。

现在我想传递那些参数而不传递给克隆对象,但我不知道 如何直接转换它。

有什么想法吗?

注意:正如kaminari所阐明的那样,传递的参数不是严格的“名称”和“任何”,但可以是任何取决于我想要创建的对象。代码中的'theClass'只是一个例子。

感谢。

2 个答案:

答案 0 :(得分:1)

编辑:根据这些功能的预期用途:

维持预期行为的最佳选择可能是以下列方式实现您的功能:

function theClass(options){
   this.name = options.name || ''; //or some other default value
   this.whatever = options.whatever || '';
};

function doSomething(options){
   options = options || {};
   return new theClass(options);
};

考虑到这个实现,您在“使用期望”中提供的代码将如下所示:

var myNewObject = doSomething({name: "honda", whatever: "motorbike"});

console.log(myNewObject.name);

通过这种方式,theClass可以根据需要支持尽可能多的参数(仅取决于对象中提供的内容以及您从中提取的内容)以及类似的包装器{{1}可以根据需要给出尽可能多的选项。

答案 1 :(得分:0)

  

这会影响性能,因为每次调用doSomething时,都必须创建一个克隆,以便传递要从theClass中应用的参数。

只需在clone之外定义doSomething功能,每次都不会重新创建:

function theClass(name, whatever) {
    this.name = name;
    this.whatever = whatever;
}

function clone(args) {
    theClass.apply(this, args);
}
clone.prototype = theClass.prototype;
function doSomething() {
    return new clone(arguments);
}