给定函数对象:
var foo = function foo() {
return "My methods are bar and baz";
};
foo.bar = function () {return "ok";};
foo.prototype.baz = function () {return "ok";};
如果调用foo.bar()或foo.baz(),它们会以ok响应。但是,如果我尝试foo.wrong(),我会收到错误。
有没有办法让foo函数对象响应“调用无效方法”?换句话说,我可以看到在foo函数对象中调用哪些方法以确保它们是有效的(存在)?
例如,由于javascript在原型链中搜索有效函数,是否有一种方法可以挂钩到该搜索并在搜索失败时使用我自己的函数进行响应(可能是我添加到foo原型中的函数来处理无效的方法)?
我想在foo函数本身内测试这种情况,而不是每次我尝试调用foo函数对象的方法时都是externaly。
另外,请遵守严格的模式指南。
答案 0 :(得分:3)
由于您不想在每次调用时检查函数是否存在,您可以添加call
函数来检查函数名称(如@Izzey建议的那样):
foo.call = function(name) {
if('function' === typeof this[name]) {
return this[name]();
}else{
console.error('function not found');
}
}
然后使用call(name)
函数调用每个函数:
foo.call('bar');