当前位置:  开发笔记 > 编程语言 > 正文

如何在JavaScript中将"对象"转换为函数?

如何解决《如何在JavaScript中将"对象"转换为函数?》经验,为你挑选了2个好方法。

JavaScript允许将函数视为对象 - 如果首先将变量定义为函数,则可以随后向该函数添加属性.你如何反过来,并为"对象"添加一个功能?

这有效:

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

此时,foo()调用该函数,并foo.baz具有值"qqqq".

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

var bar = { baz: "qqqq" };

我现在可以做什么来安排bar.baz值"qqqq" bar()调用该函数?



1> Alan Storm..:

这里很容易混淆,但你不能(轻松或清楚地或据我所知)做你想做的事.希望这有助于澄清问题.

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

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

其次,函数 Javascript中的ARE对象.具体来说,它们是一个Function对象.Function对象继承自Object对象.签出Function构造函数

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

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

最后,预测一个可能的问题,即使一旦被宣布为函数,你也不能(据我所知)改变functionBody/source.


只是旁注,您无法更改源,但您可以随时重新定义该功能(例如覆盖它).

2> Kent Fredric..:

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

为什么,这是个问题.

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是整数.整数没有数组方法.你不能成功.


为什么这个工作根本不是一个谜.你只是用函数替换x.
推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有