是否可以通过实现其中的任何一个call
或apply
以其他方式使对象可调用?例如:
var obj = {};
obj.call = function (context, arg1, arg2, ...) {
...
};
...
obj (a, b);
Run Code Online (Sandbox Code Playgroud)
Max*_*Max 20
不,但您可以在函数上添加属性,例如
function foo(){}
foo.myProperty = "whatever";
Run Code Online (Sandbox Code Playgroud)
编辑:要"制作"一个可调用的对象,你仍然必须执行上述操作,但它可能看起来像:
// Augments func with object's properties
function makeCallable(object, func){
for(var prop in object){
if(object.hasOwnProperty(prop)){
func[prop] = object[prop];
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你只需使用"func"函数而不是对象.实际上所有这个方法都是两个对象之间的复制属性,但是......它可能对你有帮助.
0xc*_*0de 14
ES6
现在有更好的解决方案.如果您(使用创建以不同的方式你的对象class
,extend
荷兰国际集团"功能"型),你可以拥有它的可调用的实例.
另请参见:如何使用ES6类扩展函数?
小智 7
其他人提供了当前的答案(“否”)和一些解决方法。至于未来一流的支持,我向 es-discuss 邮件列表建议了这一点。当时这个想法并没有取得多大进展,但也许一些额外的兴趣会有助于让这个想法再次付诸实践。
https://esdiscuss.org/topic/proposal-default-object-method
遵循@Max 的同一行,但使用 ES6 扩展将Object
对象的所有属性和原型传递obj
给 callable func
。
Object.assign(func, obj);
Object.setPrototypeOf(func, Object.getPrototypeOf(obj));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13397 次 |
最近记录: |