gpt4 book ai didi

javascript - 将函数添加到另一个函数 JavaScript 的范围

转载 作者:行者123 更新时间:2023-11-30 07:56:38 25 4
gpt4 key购买 nike

我正在尝试让下面的示例代码正常工作。
编辑(试图更清楚地说明目标是什么):

我不想让 obj 的所有函数和变量在函数 setupdraw 中可用,因为它们是全局变量。这不适用于浏览器。这是针对 Adob​​e ExtendScript 的,所以我只能使用 EcmaScript 3 和一些 polyfill。 lib.js 文件由我提供,并包含在 user-script.js 文件的之前。用户可以引用哪些功能可用,并可以在 setupdraw 中使用它们。这实际上与 P5.js 非常相似确实如此,但我正在努力为 InDesign 实现这一目标。我们当然可以调用 obj.foo()。目的是摆脱 obj.,让用户可以调用 foo 并获得 obj.foo 的结果.

这是 lib.js。这只是图书馆的一小部分来说明我手头的东西。

var obj = {
foo: function() {
console.log('foo');
},
bah: function() {
console.log('bah');
},
foobah:function(arg){
return arg*2;
},
CONST:"Hello World",
go:function(){
// looks in the global scope if there is
// a setup and draw function and should patch them.
if(typeof glob.setup === 'function'){
glob.setup();
},
if(typeof glob.draw === 'function'){
glob.draw();
}
}
};

这可能是 user-script.js。我们提供的结构是:

  • #include 库
  • 函数设置(){}
  • 函数绘制(){}
  • obj.go() 作为一切的执行(稍后可能会被删除)

我不能告诉用户在设置和绘图中编写更多额外的代码。用户的部分应该减少到他可以手写,而不需要使用样板或类似的东西。

#include lib.js

function setup() {
foo(); // might be called or not
console.log('in setup');
}

function draw() {
bah();// might be called or not
console.log('in draw');
}
obj.go()

感谢您的所有回答。我将审查它们并返返回告最终决定是什么。他们似乎都以不同的方式解决问题。我目前无法判断哪个是“正确”答案。那些我们似乎最接近我的问题的人得到了我的支持。

最佳答案

这会按照您的要求使用闭包和高阶函数执行,但是 obj 在 fn1 和 fn2 的范围内,因此不需要注入(inject)实际函数,您可以从每个函数中调用 obj.foo。

var obj = {
foo: function() {
console.log('foo');
},
bah: function() {
console.log('bah');
}
};

function higherOrderF(f,name){
return function(){
name && console.log(name)
return f.apply(null,arguments)
}
}

var fn1 = higherOrderF(obj.foo, 'fn1')
var fn2 = higherOrderF(obj.bah, 'fn2')

fn1();
fn2();

关于javascript - 将函数添加到另一个函数 JavaScript 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38147118/

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