雖然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'結果之外。 –