将参数传递给一个调用另一个方法的类的方便方法

时间:2016-01-04 21:34:34

标签: javascript node.js

我有一个像这样的原型方法:

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)结束了一个空数组。如果没有更好的方法,那么最好的解决方法是什么?

1 个答案:

答案 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的更多文档。