【问题标题】:Javascript toString overwrite function return typeJavascript toString 覆盖函数返回类型
【发布时间】:2015-06-09 17:23:09
【问题描述】:

我是 JavaScript 编程语言的新手,目前正在学习闭包。我知道如果我们提醒返回函数的函数,我们会看到返回函数的源代码:

function sum(a) {
  var sum = a
 function f(b) {
    sum += b
    return f
  }
  f.toString = function() { return sum }
  return f
}

var a=sum(2)(2)(2)(2); //why this sum function return sum
                       //instead of function f source code
alert(a);

在上面的代码中,为什么函数sum()返回内部范围变量sum而不是返回函数f源代码。 toString函数会覆盖函数sum()的返回类型吗?

【问题讨论】:

  • 与您的问题没有直接关系,但恕我直言,您通过使用同名的变量和封闭函数来自找麻烦(而且它闻起来像某些版本的 BASIC)

标签: javascript


【解决方案1】:

alert(a) 将调用a.toString() 并显示其结果。

默认函数toString() (Function.prototype.toString) 返回函数的源代码。

如果您将其替换为您自己的toString(),它将返回您的函数返回的任何内容。

【讨论】:

  • 感谢您的关注先生..但是为什么下面的函数返回“你好!”而不是“嗨”。我已经替换了我自己的 toString 。函数 f(){ 返回“你好!”; f.toString=function(){ 返回“嗨!”; } } 变量 a=f(); alert(a);//你好
  • @DevMini:你调用的是函数,而不是它的toString。根据定义,调用返回 "Hello!" 的函数将返回 "Hello!"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-15
  • 2020-10-21
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-01
相关资源
最近更新 更多