例如,我有:
var n = {
abc: function() { print("abc"); },
def: function() { print("def"); },
};
有没有办法将abc
和def
导出为全局函数,这样我就可以直接调用abc()
,而不是n.abc()
?
我的上下文是使用Rhino/Nashorn脚本引擎,我想注入一个提供全局函数的“全局”对象。
为什么不直接使用JavaScript的bind
,call
和应用
方法来调用对象的成员函数呢?使它们全局表示代码气味。
Rhino和Nashorn的答案会有所不同。
对于Rhino,当您使用上下文创建全局对象时。initStandardObjects
,然后可以通过调用ScriptableObject在Java端添加属性。定义属性(参见Rhino API),然后属性将被添加到该全局范围。如果您需要一个
function
类型的属性(如示例所示),请使用FunctionObject API创建它。
对于Nashorn,您可以使用主要基于标准
javax的接口。脚本
API,带有几个特定于Nashorn的扩展。评估脚本时,首先使用ScriptEngine。createBindings()
创建绑定对象,然后使用绑定。使用
eval(字符串/读取器、绑定)
如果您需要一个函数属性,那么在Java调用ScriptUtils.wrap创建一个
ScriptObjectMirror
(确保将其转换为该属性;方法的返回类型是Object
),然后调用get([函数名])
获取一个可执行函数属性,然后将其放入全局作用域。
综上所述,在我看来,这在脚本方面更容易处理,使用:
var abc = function() { return n.abc.apply(n,arguments); };
这可以跨犀牛/纳肖恩移植,而且是一行,如果你想避免写那一行,这比你要做的工作要少得多。
如果在全局范围内执行,则不需要限定符;它将作为属性添加到顶级对象中。如果你想更明确,你可以这样做:
(function() {
var global = this; // inner functions called without target default to global as 'this'
this.abc = function() { return n.abc.apply(n,arguments); };
})();
...除非你开始做一些更有趣的事情(比如加载脚本时乱动“this”值),否则这是可行的。
如果你需要让一个工具函数在每个组件可用,可以把方法挂载到 Vue.prototype上。 注册 main.js 中 Vue.prototype.$method = function () {} 一般建议函数名使用 $ 前缀。像 vue-router 的 $route 和 $router。 使用 那么组件代码里 export default { created () { this.$m
问题内容: 因此,我正在重构代码以实现更多的OOP。我设置了一个类来保存页面属性。 稍后,我像这样调用set_page_title()函数 当我收到错误消息时: 调用非对象上的成员函数set_page_title() 那我想念什么呢? 问题答案: 这意味着它不是对象的实例。我们可以看到您用来初始化变量的代码吗? 当您期望特定的对象类型时,还可以使用PHP的类型提示功能 Docs 在违反逻辑时得到错
问题内容: 我正在尝试使用Luaj + Java构建控制器。我有以下java类 以及控制器的以下lua脚本: 理想情况下,我想定义一个控制器(用lua编写),在其中我将保留程序的所有逻辑,并且我希望将该控制器的API公开给我的Java代码。我正在尝试使用以下方法: 我无法将对象传递给LuaValue。如何将Java对象传递给lua脚本? PS:通常,在使用Java和嵌入式脚本时,人们会将功能捆绑在
全局函数 返回上级 DirectDrawCreate DirectDrawCreateClipper DirectDrawEnumerate DirectDrawEnumerateEx DirectDrawCreate 返回目录 创建一个DirectDraw对象的实例。 HRESULT WINAPI DirectDrawCreate( GUID FAR *lpGUID, LPDIRECTDRAW
debug 调试打印PHP变量,并中断执行。等同于 var_dump($var1, $var2);die; table 将任意MySQL表构造成Model对象。 table($table_name, $db_object_id); model 创建模型对象。 model($model_name, $db_object_id);
Herosphp提供了一些全局辅助函数: //格式化打印变量(数据) __print($message); //终端高亮打印绿色(success) tprintOk($message); //终端高亮打印红色(error) tprintError($message); //终端高亮打印黄色(warning) tprintWarning($message); //计算字符串的hash值, 默