JavaScript允许将函数视为对象 - 如果首先将变量定义为函数,则可以随后向该函数添加属性.你如何反过来,并为"对象"添加一个功能?
这有效:
var foo = function() { return 1; }; foo.baz = "qqqq";
此时,foo()
调用该函数,并foo.baz
具有值"qqqq".
但是,如果首先执行属性赋值部分,那么如何随后将函数赋值给变量?
var bar = { baz: "qqqq" };
我现在可以做什么来安排bar.baz
值"qqqq" 并 bar()
调用该函数?
这里很容易混淆,但你不能(轻松或清楚地或据我所知)做你想做的事.希望这有助于澄清问题.
首先,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.
似乎没有标准的方法来做到这一点,但这是有效的.
为什么,这是个问题.
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是整数.整数没有数组方法.你不能成功.