是否可以为JavaScript函数提供类型/类?

时间:2014-06-30 23:09:23

标签: javascript reflection

我想知道是否可以为JavaScript函数提供类型/类。

当然,Object类/函数类型是'函数/函数'。

http://bonsaiden.github.io/JavaScript-Garden/#types.typeof

但是,在我的项目中,我想以某种方式定义函数类来对它们进行分组。

它是类似的概念HTML / CSS DOM元素类。

我有一个函数,其中args是一个函数,我想区分函数的typeclass被传递给函数。

它不适用于任何对象方法,只是一个函数,但可以区分为obj.hasOwnProperty('someClass')

我只是想知道是否有聪明的方法,如果你认为不可能,请坚持。

感谢。

PS。我不是为什么有人投票-1并关闭这个问题。

这是Javascript reflection的问题。如果发现JS的某些反射因子有限,那就没问题。而且我认为避免明确某种语言不可能存在是不明智的。

2 个答案:

答案 0 :(得分:0)

函数是一个对象。您可以将自己的自定义属性添加到任何功能。因此,如果您想在几个不同的函数上设置自己的类型,以便可以测试它,您可以只为这些函数添加相同的自定义属性(分配了不同的值)。

function myFunc1() {}
myFunc1.myType = "whatever1";

function myFunc2() {}
myFunc2.myType = "whatever2";

function myFunc3() {}
myFunc3.myType = "whatever3";

function callMe(cb) {
    if (cb.myType === "whatever1") {
        // code here
    } else if (...) {
        // code here
    }
}

callMe(myFunc1);

请注意,这有点不寻常,如果您解释了您尝试解决的实际问题,可能会有一个更常见的设计模式可能会对您有所帮助。

答案 1 :(得分:0)

@ jfriend00提出了答案。

  

仅供参考,函数是对象,因此它们可以拥有您自己的自定义属性,因此您可以创建自己的自定义属性。

他是对的,所以要为任何函数添加一个类/属性,只需执行

var myFunction = function(foo){...};
myFunction['someClass'] = true;

//To distinguish

if (someFunction.hasOwnProperty('someClass'))
      {
        console.log('someFunction is someClass'); 
      }