是否可以通过对其执行call
或apply
或以其他方式执行对象调用?例如:你可以让一个对象“可调用”吗?
var obj = {};
obj.call = function (context, arg1, arg2, ...) {
...
};
...
obj (a, b);
是否可以通过对其执行call
或apply
或以其他方式执行对象调用?例如:你可以让一个对象“可调用”吗?
var obj = {};
obj.call = function (context, arg1, arg2, ...) {
...
};
...
obj (a, b);
不,但您可以将属性添加到函数中,例如,
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“函数而不是对象。真的,这个方法所做的就是复制两个对象之间的属性,但是......它可能会帮助你。
是的,但你如何复制原型链?我需要一个可调用的函数/对象,但实际上是一个类型的实例。 –
我希望有一个符号可以让对象像'obj [Symbol.invoke] = function(args){};}调用;' –
ES6
现在有这个更好的解决方案。如果以不同的方式创建对象(使用'Function'类型),则可以有一个可调用的实例。
不,这是不可能的。一个对象必须作为一个实例化的函数被调用。 [构造在JavaScript调用对象]的 – Pointy
可能重复(http://stackoverflow.com/questions/12656079/constructor-for-callable-object-in-javascript) –
@HansZ不是真的,我的问题是有关使*现有*对象可调用,而不是创建一个新对象。 – Septagram