你能让一个对象“可调用”吗?

新手上路,请多包涵

是否可以通过在其上实施 callapply 或以其他方式使对象可调用?例如:

 var obj = {};
obj.call = function (context, arg1, arg2, ...) {
    ...
};

...

obj (a, b);

原文由 Septagram 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 883
2 个回答

不,但是您可以将属性添加到函数中,例如

function foo(){}
foo.myProperty = "whatever";

编辑:要“使”一个对象可调用,您仍然需要执行上述操作,但它可能看起来像:

 // Augments func with object's properties
function makeCallable(object, func){
    for(var prop in object){
        if(object.hasOwnProperty(prop)){
            func[prop] = object[prop];
        }
    }
}

然后你只需使用“func”函数而不是对象。实际上,此方法所做的只是在两个对象之间复制属性,但是……它可能对您有所帮助。

原文由 Max 发布,翻译遵循 CC BY-SA 4.0 许可协议

ES6 现在有更好的解决方案。如果您以不同的方式创建对象(使用 class , extend ing ‘Function’ 类型),您可以拥有它的可调用实例。

另见: How to extend Function with ES6 classes?

原文由 0xc0de 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏