为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 中方法的存在:检查是否足够真实?

JavaScript 中方法的存在:检查是否足够真实?

慕村225694 2021-08-20 14:26:07
如果我想测试一个对象是否有特定的方法:下面的代码工作可靠吗?const obj = {  add(a, b) {    return a + b  }}if (obj.add) {    console.log(obj.add(9, 3));}if (obj.sub) {    console.log(obj.sub(8, 2));}或者它可能会失败?如果是这样:出于什么原因?如果这还不够:我应该用什么来代替?
查看完整描述

3 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

既然你想调用这个方法,你应该先检查它是否真的是一个方法。如果它是一个非函数属性,那么你所做的将导致 TypeError。


const obj = {

  add: true

}


if (obj.add) {

    console.log(obj.add(9, 3));

}


if (obj.sub) {

    console.log(obj.sub(8, 2));

}

所以:


const obj = {

  add(a, b) {

    return a + b

  },

  badProp: true

}

const verify = arg => typeof arg === 'function';

if (verify(obj.add)) {

    console.log(obj.add(9, 3));

}


if (verify(obj.sub)) {

    console.log(obj.sub(8, 2));

}


if (verify(obj.badProp)) {

    obj.badProp();

}


查看完整回答
反对 回复 2021-08-20
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

typeof() 是一种检查天气的方法 var 是函数还是其他任何东西。


if (typeof obj.add === 'function') {

    console.log(obj.add(9, 3));

}


查看完整回答
反对 回复 2021-08-20
?
慕容3067478

TA贡献1773条经验 获得超3个赞

你可以这样试试。检查是否object key是一个函数,


const obj = {

  add:function (a, b) {

    return a + b

  },

   sub:function (a, b) {

    return a - b

  }

}


if (typeof obj.add === 'function') {

    console.log(obj.add(9, 3));

}


if (typeof obj.sub === 'function') {

    console.log(obj.sub(8, 2));

}


查看完整回答
反对 回复 2021-08-20
  • 3 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信