JavaScript调用对象方法出现异常,请求技术排查
问题排查与修复
我帮你瞅了瞅这段代码,运行出错的原因很明确——你在调用方法的时候用错了语法!
问题根源
在invokeMethod函数里,你已经通过const func = object[method]拿到了目标方法的引用,但接下来你写了object.func();,这里的.语法会把func当成一个固定的属性名去访问,而不是你之前定义的变量func的值。换句话说,JavaScript会去查找object上有没有叫"func"的方法,而不是你传入的"sayName",自然就会报错啦。
两种修复方式
方式一:直接调用拿到的方法引用
既然已经把方法赋值给了func变量,直接调用它就行:
const info = { name: 'Steve', phone: 20655564, email: 'SJ@yahoo.com', sayName: function(){ console.log('Hello I am ' + info.name); }, }; function invokeMethod(object, method) { const func = object[method]; func(); // 直接调用拿到的方法引用 } invokeMethod(info, 'sayName');
方式二:省略中间变量,直接通过方括号调用
其实你完全可以不用额外的变量,直接用方括号语法调用方法:
const info = { name: 'Steve', phone: 20655564, email: 'SJ@yahoo.com', sayName: function(){ console.log('Hello I am ' + info.name); }, }; function invokeMethod(object, method) { object[method](); // 直接用方括号访问并调用方法 } invokeMethod(info, 'sayName');
额外小建议
为了代码更健壮,你可以加个判断,确保传入的method确实是对象上的可调用方法:
function invokeMethod(object, method) { if (typeof object[method] === 'function') { object[method](); } else { console.error(`${method} is not a valid function on the object`); } }
内容的提问来源于stack exchange,提问作者user2785628
相关产品推荐
相关产品推荐

