【问题标题】:Javascript calling function from table of objects对象表中的 Javascript 调用函数
【发布时间】:2016-03-11 17:10:03
【问题描述】:

我正在学习 javascript,但在从表中调用函数时遇到问题。代码如下:

function Constructor(v1,v2,v3)
{
  this.v1 = v1;
  this.v2 = v2;
  this.funk = function()
  {
    console.log("Test: "+ v3 );
  }
}

var obj1 = new Constructor("par1","par2","par3");
var arr = ["w1","w2","w3",obj1];

function f2()
{            
  obj1.funk(); //works ok
  console.log("test "+arr[3].funk.call() ); //doesn't work
}

【问题讨论】:

  • arr[3].funk()你为什么不用这个?
  • 对不起,我已将名称更改为 arr。 @Rajaprabhu Aravindasamy arr[3].funk() 给了我“未定义”
  • 不,它应该有效。 jsfiddle.net/gy94kvLf
  • 那是因为你没有从 this.funk 返回任何东西——所以字符串 concat 是未定义的。如果没有返回,那么 javascript 总是从函数返回 undefined

标签: javascript arrays function object


【解决方案1】:

调用f2()的输出是:

Test: par3
Test: par3
test undefined

这是有道理的,funk 被调用两次并记录前两行。第三行是test undefined,因为funk 不返回任何内容。它被调用并记录其测试行,然后返回 undefined 以记录在 f2 函数的最后一行。

【讨论】:

  • 菜鸟错误。感谢您的解释:)
【解决方案2】:
function f2()
{            
  arr[3].funk();
}

代码运行良好,但 funk() 没有返回任何内容,这就是您未定义的原因。

【讨论】:

    【解决方案3】:

    这是因为您需要将上下文传递给 funk。试试这个

    arr[3].funk.call(arr[3])
    

    【讨论】:

    • funk 不使用this。设置它不会改变任何东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 2015-11-16
    • 2016-05-19
    相关资源
    最近更新 更多