Tôi muốn sử dụng phương thức JavaScript .apply cho các chức năng của tiết kiệm được biên soạn cho Node.js. Các tập tin tiết kiệm .js có mã như thế này:.được áp dụng mà không thay đổi phạm vi
...
var NimbusClient = exports.Client = function(output, pClass) {
this.output = output;
this.pClass = pClass;
this.seqid = 0;
this._reqs = {};
};
NimbusClient.prototype = {};
NimbusClient.prototype.getClusterInfo = function(callback) {
this.seqid += 1; // line where error is thrown [0]
this._reqs[this.seqid] = callback;
this.send_getClusterInfo();
};
...
tập tin máy chủ của tôi trông theo cách sau:
var thrift = require('thrift')
, nimbus = require('./Nimbus')
, connection = thrift.createConnection('127.0.0.1', 6627)
, client = thrift.createClient(nimbus, connection)
, ... // server initiation etc
app.get('/nimbus/:command', function(req, res, next) {
client[req.params.command](console.log); // direct call [1]
client[req.params.command].apply(this, [console.log]); // apply call [2]
});
...
Cuộc gọi trực tiếp [1] trả về các giá trị như mong đợi, nhưng áp dụng cuộc gọi [2 ] luôn luôn tạo những lỗi sau đây trong dòng [0]:
TypeError: Cannot set property 'NaN' of undefined
tôi đã cố gắng một vài thông số phạm vi khác trong [2]: null
, nimbus
, nimbus.Client
, 0.123., nimbus.Client.prototype[req.params.command]
và client[req.params.command]
, tất cả đều không thành công.
Làm cách nào tôi có thể gọi phương thức áp dụng mà không thay đổi phạm vi thực tế của hàm được gọi, để nó hoạt động giống hệt như khi được gọi trực tiếp?
thử foo.apply (null, ...) –
foo.apply (null, ...) tạo ra các lỗi tương tự – Thomas
tôi là loại tò mò là tại sao bạn muốn gõ 'apply' phương pháp trong lần đầu tiên đặt nếu bạn muốn giữ lại phạm vi mặc định ... – subhaze