,而不是在node.js的,:動態添加對象的方法,我的上下文
dummy = require('dummy')
dummy.aMethod()
dummy.anotherMethod()
我想用直接在我的上下文中的方法:
dummy = require('dummy')
loadMethods(dummy)
aMethod()
anotherMethod()
我怎樣才能實現函數loadMethods?
,而不是在node.js的,:動態添加對象的方法,我的上下文
dummy = require('dummy')
dummy.aMethod()
dummy.anotherMethod()
我想用直接在我的上下文中的方法:
dummy = require('dummy')
loadMethods(dummy)
aMethod()
anotherMethod()
我怎樣才能實現函數loadMethods?
一兩件事你可以做的是使用with
,像這樣的:那不是,雖然推薦的,因爲它使很多東西含糊不清,沒有表現,你會期望他們
with (dummy) {
aMethod();
anotherMethod();
}
。
要完全按照您的要求進行操作,可以將這些方法添加到global
對象中。您可以使用這樣的事情:
for (var prop in dummy) {
if (dummy.hasOwnProperty(prop)) {
global[prop] = dummy[prop];
}
}
這種方法有其侷限性太大,雖然 - 例如,你不能在一個函數體中使用amethod方法(),該this
對象將是錯誤的(當然, ,你可以使用bind
來保持它的正確性)。而且,global
並不是真正的全球性,而是模塊範圍的 - 所以每個模塊都有自己的global
對象。
因此,權衡這些選項,您應該堅持使用通過dummy
的方法。通過這種方式,您將始終獲得預期的行爲(this
將爲dummy
),並且您將清楚地指出您正在使用的方法實際在dummy
模塊中實施並使用其狀態。找到一個好的IDE並輸入不應該是一個問題。
利用this
的延展性。當函數被調用時沒有被綁定到this
的特定範圍(可以通過.call,.apply或在方法上下文中完成),那麼this
引用全局對象。這段代碼可以在瀏覽器以及Node.js中使用,但是當然會覆蓋其他全局範圍的函數。謹慎使用......一般來說,我建議不要使用它。
function loadMethods(obj) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof(obj[prop]) === 'function') {
this[prop] = obj[prop]
}
}
}
您可以瞭解更多關於this
背景here