gpt4 book ai didi

javascript - Monkeypatch 导出函数

转载 作者:太空宇宙 更新时间:2023-11-04 02:15:11 25 4
gpt4 key购买 nike

nodev4上运行 -

假设我有 2 个库:foobar

foo 有这个

var bar = require('./lib/bar');
exports = module.exports = function myApp(options) {
[snip]
}
exports bar = bar;

有这个

module.exports = function doStuff(moreOptions) {
function doMoreStuff () {
}
}

我的应用程序有

x = requires(foo); 

我想做的是让我的应用程序对 doMoreStuff 函数进行猴子补丁 - 这可能吗?

我尝试过各种库,但我怀疑我对 js 的理解存在根本问题;)

最佳答案

让我们看看这里有什么。之后

x = requires(foo);

你基本上有以下内容

x = function (options){ /* function work */ }
x.bar = function(moreOptions){
function doMoreStuff(){
}
}

这虽然不“非法”,但却很奇怪。相当于

a = function() { return "I'm a function"; }
a.bar = "I'm a string attached to a function";

console.log(a()); // => "I'm a function"
console.log(a.bar); // => "I'm a string attached to a function"

你的酒吧模块没有做太多事情。它是一个包含无法访问的函数的函数。让我们假设你的意思是

module.exports = function(moreOptions){
return {
doMoreStuff: function(){
return "Bar doing more stuff";
}
}
}

如果您想新建一个 myApp 并附加一个外部函数,您会

function myApp(options){

}
myApp.prototype.bar = bar(); // since you exported a function
module.exports = myApp;

在您的主应用程序中,您现在可以

x = require('foo');

var app = new foo(); // you MUST otherwise you get an empty function
app.bar.doMoreStuff(); // => "Bar doing more stuff"

或者(并且不太容易出错)foo 可以是

var bar = require('bar');
module.exports = function (options) {
// work here ...
return {
bar: bar(), // again, exported as function
appOptions: options,
// ...
}
}

然后在主模块中

x = require('foo');
x.bar.doMoreStuff(); // => "Bar doing more stuff";

希望这有帮助。

关于javascript - Monkeypatch 导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36090461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com