尽管this
看起来像一个变量并且经常表现得像一个变量,但它并不是真正的变量,因此在闭包中的行为不像一个变量。当您将一个函数嵌套在另一个函数中时,内部函数将获得一个全新的版本,this
该版本不太可能与外部函数的this
.
this
因此,如果您需要在内部函数中引用外部函数,则必须先将其复制到真正的变量中(大多数人喜欢调用它,self
但有些人更喜欢that
),然后在内部函数中引用该变量。
但是,在您的情况下,您已经有了一个真正的变量,即memcached
,您可以分配给它,因此只需在回调中替换this
为。memcached
它是由您的回调创建的闭包的一个适当范围的外部变量(从您可以在其中使用的事实可以看出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
从它们中获取值。那根本行不通。