【发布时间】:2016-12-28 22:19:24
【问题描述】:
是否可以读取 java 脚本函数参数及其类型信息?
例如,我有一个类如下:
sap.ui.define( ['sap/ui/core/theming/Parameters'],
function(P){
'use strict';
var B=C.extend('sap.m.Button', {
metadata:{
properties:{
text:{
type:'string',
group:'Misc',
defaultValue:null
},
type:{
type:'sap.m.ButtonType',
group:'Appearance',
defaultValue:sap.m.ButtonType.Default
}
}
} );
.....B.prototype.setType=function(t){this.setProperty('type',t);....
......lot of code exposes public setter & getter methods for the above properties.......
} );
类的完整代码可以从here获取。
我能够从类公开的公共方法中读取方法名称。但这不允许我知道参数及其类型信息。
例如:B.prototype.setType 是一个公开的方法。我可以获取 Button 类的对象,但不知道如何在运行时读取其参数类型信息。
如果我想让用户为“type”属性添加值(它是按钮类型),我应该知道他可以输入的值的类型。
我怎样才能做到这一点?
谢谢
编辑 1:
在我的第一步中,我使用框架公开的 sap.m.Button 类的getMetadata() 方法,这给了我 publicMethodNames 但它没有给我关于参数类型信息的信息。所以,我正在寻找替代品。
在java中,针对这种需求,我们有反射API。我们如何在 javascript 中实现相同的功能?
编辑 2: 说明在 IDE 中实现的结果的屏幕截图。
【问题讨论】:
-
给出的代码不足以理解你想要什么。显然,您可以在函数调用中检查参数的类型,但在实际调用函数(方法)之前,参数只是一个名称占位符,因为 JS 不是类型化语言。
-
Dellirium,感谢您的评论。添加了实际类的参考链接。
-
没有暴露类型信息的反射API,因为语言中没有任何类型信息。您能做的最好的事情就是在其他地方获取该信息。例如,如果您知道 Button 的 setType 期望参数具有来自某个列表的值,您可能能够发现该列表在框架代码中的定义位置。
-
@artem:如果我知道一个方法在其参数中的期望,我应该能够创建相应的对象。但我的挑战是找到一个方法(例如 setType)接受什么。类似的事情在 Web IDE 中完成,但目的不同。我添加了截图。
-
哦。看起来该框架已记录在案:openui5.hana.ondemand.com/#docs/api/symbols/…,并且此类文档通常是从某个来源生成的。如果是这样,您可以尝试了解文档生成器(或那个 IDE)的工作原理以及它从哪里获取这些信息。
标签: javascript metadata metaprogramming sapui5