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

有没有办法确定我的对象方法是不是函数

有没有办法确定我的对象方法是不是函数

芜湖不芜 2021-10-14 10:24:09
我有一个函数,它遍历一个对象数组并返回一个模板文字,它获取一个属性值(名称)和一个作为函数方法的属性值(这是 .move / 他们将采取多少步骤) .move方法使用 math.random 选择随机数量的步骤并返回该值。但是,在某些对象中,移动属性被定义为整数,例如 1 或 2,而不是随机数。有没有办法更改我的fitnessTest函数,以便它同时接受.move()和.move?我尝试在我的 while 语句中使用 if else 语句说while (steps <= 20) {  if (typeof arrayObject == function) {    steps += arrayObject[i].move();    turns++;  } else    steps += arrayObject[i].move;    turns++;它返回将 .move 值正确定义为整数的对象,但不会为具有 .move() 的对象返回随机数。function fitnessTest(arrayObject){  let turnsArray = [];  for (i = 0; i < arrayObject.length; i++){    let steps = 0;    let turns = 0;    while (steps <= 20){      steps += arrayObject[i].move();      turns++;    } turnsArray.push(`${arrayObject[i].name} took ${turns} turns to take 20 steps.` );  }      return turnsArray;}现在,该函数将遍历一个对象数组,这些对象.move()作为一个函数生成一个随机数并返回正确的字符串,但是将 .move 设置为整数的对象只会给我一个类型错误arrayObject[i].move不是函数
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

检查typeof数组元素而不是数组变量。


var arr = [ { move: 10}, {move: function () {}} ];

console.log(typeof arr) // object

console.log(typeof arr[0].move) // number

console.log(typeof arr[1].move) // function

将您的代码更改为:


while (steps <= 20) {

  if (typeof arrayObject[i].move === "function") {

    steps += arrayObject[i].move();

    turns++;

  } else   if (typeof arrayObject[i].move === "number")

    steps += arrayObject[i].move;

    turns++


查看完整回答
反对 回复 2021-10-14
?
守着星空守着你

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

typeof为您提供一个字符串,因此您需要使用"". 还要比较move属性而不是对象本身。


您可以根据自己的目的使用三元运算符,并且可以拥有更优雅的代码。


while (steps <= 20) {

  steps += typeof arrayObject[i].move === "function" ? arrayObject[i].move() : arrayObject[i].move;

  turns++;

}


查看完整回答
反对 回复 2021-10-14
?
斯蒂芬大帝

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

1.typeof返回一个字符串值,需要与 JavaScript 类型的字符串进行比较。

2. 你应该测试move单个项目的属性arrayObject是否是一个函数,而不是arrayObject它本身:

typeof arrayObject[i].move == 'function'


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

添加回答

举报

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