【问题标题】:What is the difference between a function object and a callable object?函数对象和可调用对象有什么区别?
【发布时间】:2010-10-28 04:20:33
【问题描述】:

我最近看到了presentation about the changes in ECMAScript 5。还有一个slide 有这样的声明:

函数 vs 可调用

typeof f === 'function'                       // → f is Callable
({}).toString.call(f) === '[object Function]' // → f is a Function

谁能给我解释一下FunctionCallable的区别是什么?

【问题讨论】:

  • 链接已失效。

标签: javascript function callable


【解决方案1】:

一般来说,一个对象可以被调用而不是一个函数。在一切都是对象(包括函数)的语言中,可调用对象不必来自 Function 类。

在 JS 中,看起来 Callable 是任何具有内部 [[Call]] 方法的东西(由 'function' 的 typeof 标识,而不是 'object')。函数(如幻灯片中所用)是函数对象的后代。我可能是错的,但是在脚本中你只能创建函数,而 ECMAScript 实现可以定义不是函数的 Callables。

如果您使用匿名函数/函数表达式和声明函数尝试幻灯片中的代码片段,结果是相同的。

typeof function() {}; // == 'function'
({}).toString.call(function() {}) // == '[object Function]'
function foo() {}
typeof foo; // == 'function'
({}).toString.call(foo) // == '[object Function]'

【讨论】:

  • 为了启发 outis 的回应,这里是关于它是如何形成的讨论:bugs.ecmascript.org/ticket/153
  • 更多信息:(function(){}).constructor; // → 函数原型 ({}).constructor; // → 对象原型
  • @FranCorpier 该链接不好。你能更新吗?看起来这可能是一个有趣的讨论。
  • @Icode4food:该票似乎不再存在于网站上,但 Wayback Machine 已将其存档:web.archive.org/web/20091228035416/http://bugs.ecmascript.org/…
  • 那个链接现在也失效了
猜你喜欢
  • 2019-03-19
  • 2018-09-09
  • 2017-03-07
  • 2017-03-31
  • 2011-09-23
  • 2013-06-26
  • 2011-07-31
  • 1970-01-01
相关资源
最近更新 更多