2016-08-22 6 views
2

Javaスクリプトの関数の引数とその型情報を読み取ることは可能ですか?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 =関数(T){this.setProperty( 'タイプ'、T)。 ....

......lot of code exposes public setter & getter methods for the above properties....... 
         }); 

クラスの完全なコードはhereからアクセスすることができます。

クラスによって公開されているパブリックメソッドからメソッド名を読み取ることができます。しかし、これは議論とそのタイプ情報を知ることができません。例えば

B.prototype.setTypeが露出公共の方法です。 Buttonクラスのオブジェクトを取得することはできますが、実行時にその引数型情報をどのように読み取るかを知ることはできません。

「タイプ」プロパティ(ボタンタイプ)の値をユーザーに追加させたい場合は、入力できる値のタイプを知っておく必要があります。

これをどのように達成できますか?

おかげ

編集1:私の最初のステップで

、私は、フレームワークによって公開されsap.m.ButtonクラスのgetMetadata()メソッドを使用していますが、これは私にpublicMethodNames与えるが、それは与えるものではありません引数型情報に関する情報だから、私は選択肢を探しています。

Javaでは、このようなニーズのためにリフレクションAPIを使用しています。どのように我々はjavascriptで同じことを達成することができますか?

編集2: IDEで達成された結果を示すスクリーンショットです。

enter image description here

+0

与えられたコードは、あなたが望むものを理解するのに十分ではありません。関数の呼び出し内で引数の型を明らかに確認できますが、JSは型付き言語ではないので、関数(メソッド)が実際に呼び出されるまで、パラメータは名前のプレースホルダに過ぎません。 – Dellirium

+0

Dellirium、ご意見ありがとうございます。実際のクラスの参照リンクを追加しました。 – Gana

+0

言語に型情報がないため、型情報を公開するリフレクションAPIはありません。あなたができることは、他の場所でその情報を入手することです。たとえば、ButtonのsetTypeが、あるリストの値を引数に持つことを期待している場合、そのリストがフレームワークコード内で定義されている場所を検出できる場合があります。 – artem

答えて

1

あなたは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

+0

Digger2000:お返事ありがとうございます。私はあなたの提案を理解できませんでした。クラスの機能はフレームワークから来ています。私は "引数"情報を記録する関数を変更することはできません。関数の外部から関数の引数型情報にアクセスするにはどうすればいいですか?クラスが私の質問です。 Javaでは、私は、リフレクションAPIを使って、クラスとメソッドとその引数を調べることができます。似たようなことはjavascriptで可能ですか?ありがとう – Gana

+0

JavaScriptの関数は引数リストを固定していないため、引数を指定して呼び出すことができます。ただし、宣言された引数numberにアクセスできます。 var f = function(a、b){/ * code * /}; console.log(f.length); // 2 – Digger2000

+0

いいですね。私はユーザーに有効な情報を入力させるために引数とその型が必要です。 – Gana

関連する問題