虽然this
看起来像一个变量,并且往往表现得像一个,但它不是一个真正的变量,因此在闭包中不像一个变量。当你有嵌套在另外一个功能,内在功能获得的this
一个全新的版本,这是不太可能指向同样的事情外部函数的this
。
因此,如果您需要参考的外部函数的this
内部函数里面,你必须首先将其复制到一个真正的变量(大多数人喜欢叫它self
但有些人更喜欢that
),然后是指该变量在内部功能。
在你的情况,但是,你已经有了一个真正的变量,即memcached
,可以分配到,所以只是在回调memcached
更换this
。它是由回调创建的闭包的一个正确范围的外部变量(如可以在其中使用memcached.end()
的事实可以看出)。
[更新,包括你的代码格式正确的版本在评论中提及]
memcached.get = function get(key, callback) {
if (Array.isArray(key)) return this.getMulti.apply(this, arguments);
this.command(function getCommand (noreply) {
return { key: key , callback: callback ,
validate: [['key', String], ['callback', Function]] ,
type: 'get' , command: 'get ' + key };
});
};
它看起来像你想异步调用多种功能,并期待return
从它们的值。这根本行不通。
好吧,我使用初始化连接首先在'initial.js'调用'require'函数文件到该文件使用var'INIT',我尝试'INIT.memcached.r = result'在内部功能和呼叫它外面,但没有工作太 –
我不太清楚你在说什么,虽然这可能只是一个差的翻译问题。如果你能找到熟练掌握英语和母语的人,并且懂得编程,就可以尝试运行他/她所说的话,并张贴他们必须说的话。 – ebohlman
对我可怜的郎很抱歉,但我会更清楚。在第一memcached的节点应该连接到memcached服务器然后做查询。什么我所做的就是写连接代码在一个名为'initial.js'然后创建一个名为文件'test.js'在这个文件我用'INIT =要求(“初始”)'使用使用'INIT.memcached.get'其正常工作,如果我登录回调函数内的结果,但是当我尝试分配“通话result'参数后面的关键我memcahed连接和查询函数调用'INIT.memcached.r',然后将其记录到'get'函数'undefined'结果之外。 –