如何将“对象”转换为 JavaScript 中的函数?

新手上路,请多包涵

JavaScript 允许将函数视为对象——如果您首先将变量定义为函数,则可以随后向该函数添加属性。你如何做相反的事情,并为“对象”添加一个功能?

这有效:

 var foo = function() { return 1; };
foo.baz = "qqqq";

此时, foo() 调用函数, foo.baz 的值为“qqqq”。

但是,如果您先进行属性赋值部分,那么您随后如何将函数赋值给变量呢?

 var bar = { baz: "qqqq" };

我现在可以做什么来安排 bar.baz 具有值“qqqq” bar() 调用函数?

原文由 mjs 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 497
2 个回答

在这里很容易混淆,但你不能(很容易或清楚地或据我所知)做你想做的事。希望这将有助于解决问题。

首先,Javascript 中的每个对象都继承自 Object 对象。

 //these do the same thing
var foo = new Object();
var bar = {};

其次,函数 Javascript 中的对象。具体来说,它们是一个 Function 对象。 Function 对象继承自 Object 对象。检查 函数构造函数

var foo = new Function();
var bar = function(){};
function baz(){};

一旦将变量声明为“对象”,就不能(轻松或清楚地或据我所知)将其转换为 Function 对象。您需要声明一个函数类型的新对象(使用函数构造函数、为变量分配匿名函数等),并从旧对象复制方法的任何属性。

最后,预测一个可能的问题,即使将某些东西声明为函数,你也不能(据我所知)更改函数体/源代码。

原文由 Alan Storm 发布,翻译遵循 CC BY-SA 2.5 许可协议

似乎没有标准的方法来做到这一点,但这很有效。

然而,为什么,这是个问题。

 function functionize( obj , func )
{
   out = func;
   for( i in obj ){ out[i] = obj[i]; } ;
   return out;
}

x = { a: 1, b: 2 };
x = functionize( x , function(){ return "hello world"; } );
x()   ==> "hello world"

没有其他方法可以做到这一点,做

x={}
x()

将返回“类型错误”。因为“x”是一个“对象”,你不能改变它。它与尝试做一样明智

 x = 1
 x[50] = 5
 print x[50]

它不会工作。 1是一个整数。整数没有数组方法。你做不到。

原文由 Kent Fredric 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题