javascript - 读取 Javascript 函数参数数据类型信息

标签 javascript metadata metaprogramming sapui5

是否可以读取 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 访问该类的完整代码.

我能够从类公开的公共(public)方法中读取方法名称。但这不允许我知道参数及其类型信息。

例如:B.prototype.setType 是公开的公共(public)方法。我可以获取 Button 类的对象,但不知道如何在运行时读取其参数类型信息。

如果我想让用户为“类型”属性(它是按钮类型)添加值,我应该知道他可以输入的值的类型。

我怎样才能做到这一点?

谢谢

编辑 1:

第一步,我使用 getMetadata()框架公开的 sap.m.Button 类的方法,这给了我 publicMethodNames 但它没有给我关于参数类型信息的信息。所以,我正在寻找替代方案。

在java中,针对这种需求,我们有反射API。我们如何在 javascript 中实现相同的目标?

编辑 2: 显示在 IDE 中取得的结果的屏幕截图。

enter image description here

最佳答案

您可以使用arguments 对象访问函数参数:

var f = function () {
  for (var i = 0; i < arguments.length; i++) {
    console.log(arguments[i], typeof arguments[i]);  
  }
}

f(123, 'test', { a: 1}, function () { alert('x') });

UPD 如何获取声明的参数编号:

var f = function (a, b) {
  console.log(arguments); 
};

console.log(f.length); //2
f(1, 1, 1, 1); //object with 4 keys
f(1); //object with 1 key

关于javascript - 读取 Javascript 函数参数数据类型信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078266/

相关文章:

javascript - 如何向浏览器指示js文件已更改并且无需刷新即可反射(reflect)在客户端。那么它会下载新副本吗?

javascript - 菜单切换上的 jQuery slideToggle 跳转动画

java - 使用 Java nio 写入文件元数据的问题

search - 如何获取 URL 的描述

c++ - 如何使用编译时常量原语类型

来自对象字段的 Python 字典

Javascript - 如何合并到对象但只保留相同的属性

javascript - 只匹配内部 HTML?

git - 更改所有提交的提交元数据

ruby - 在模块中扩展类方法