我想用'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'只是一个例子。
感谢。
答案 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);
}