我有一个像这样的原型方法:
ProjectClient.prototype = {
connect: function() {
console.log('ARGS: ' + Array.prototype.slice.call(arguments)
// this bit takes a data object, a relationship string, and another data object as arguments,
// e.g. client.connect(user1, 'likes', user2):
var options = helpers.build.connection(this, Array.prototype.slice.call(arguments))
request({
uri: options.uri,
method: 'POST',
json: true
}, function(error, response) {
var customResponse = new CustomResponse(response)
options.callback(error, customResponse)
})
}
}
这依赖于ProjectClient
传递给helpers.build.connection
方法的实例。我也有一个“单身人士”。正在使用的ProjectClient
的共享实例。为方便起见,我将此connect()
方法的副本添加到ProjectEntity
,如下所示:
ProjectEntity.prototype = {
connect: function() {
var args = Array.prototype.slice.call(arguments)
args.unshift(this)
return Project.connect(args)
}
}
它虽然无法正常工作 - 但在执行console.log('ARGS: ' + Array.prototype.slice.call(arguments)
时,这会让我得到一个嵌套的参数数组:
ARGS: [ [ arg1, arg2, arg3 ] ]
我期待的地方:
ARGS: [ arg1, arg2, arg3 ]
将参数传递给ProjectClient.prototype.connect()
的更一致的方法是什么,这样我才能得到我期待的东西?我也尝试使用Project.connect.apply(args)
,但由于我正在返回该函数(实际上并未在此处调用它),Array.prototype.slice.call(arguments)
结束了一个空数组。如果没有更好的方法,那么最好的解决方法是什么?
答案 0 :(得分:2)
您可能希望像这样使用plot.setRangeValueFormat(new NumberFormat() {
@Override
public StringBuffer format(double value, StringBuffer buffer, FieldPosition field) {
// value is your raw value. just transform it into your desired display
// format, append it to buffer and then return buffer.
}
// unused
@Override
public StringBuffer format(long value, StringBuffer buffer, FieldPosition field) {
return null;
}
// unused
@Override
public Number parse(String string, ParsePosition position) {
return null;
}
});
将一组任意参数传递给函数:
.apply()
ProjectEntity.prototype = {
connect: function() {
var args = Array.prototype.slice.call(arguments);
args.unshift(this);
return Project.connect.apply(Project, args);
}
}
本身就有两个参数。第一个是你希望.apply()
参数在你调用的函数内部。第二个是要作为单独参数传递给函数的参数数组(不作为数组本身传递)。
有关this
here on MDN的更多文档。