Я пытаюсь получить приведенный ниже пример кода.
Edit (Стараясь быть более ясно, что цель состоит в том):Добавить функцию в область действия другой функции JavaScript
Я wan't, чтобы все функции и переменные obj
доступных в функциях setup
и draw
, как они где глобалам. Это не для браузера. Это для Adobe ExtendScript, поэтому я могу использовать только EcmaScript 3 и некоторые полисы. lib.js
файл предоставлен мной и включая до файл user-script.js
. У пользователя есть ссылка, какие функции доступны и могут использовать их в пределах setup
и draw
. Это на самом деле очень похоже на то, что делает 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();
}
}
};
Это может быть пользователь-script.js. Структура мы обеспечиваем:
- #include для Lib
- настройки функции() {}
- функция Draw() {}
- 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()
Благодаря все ваши ответы. Я рассмотрю их и вернусь, чтобы сообщить, что было окончательным решением. Кажется, что все они решают проблему по-разному. В настоящее время я не могу сказать, какой из них «правильный». Те, кого мы, кажется, были ближе всего к моему вопросу, получили от меня повышенную защиту.
Вы не можете добавлять функции к другим функциям, но вы можете создать две функции для создания нового – elclanrs
Есть ли у вас примеры для этого? – fabianmoronzirfas
'function compose (f, g) {return function() {return f (g.apply (this, arguments))}}; var h = compose (f, g) ' – elclanrs