手动将Javascript对象转换为函数

时间:2017-08-02 13:25:26

标签: javascript

我目前正在学习Javascript。 我已经读过具有内部成员[[Call]]的对象产生function作为typeof该对象的结果。 我想知道我是否可以在我的Javascript代码中设置此内部成员,即这样的可能吗? :

function my_foo(){}

var my_obj = {};  // is the ';' an empty statement?

my_obj["[[Call]]"]=my_foo; // in my test, this didn't work

如果有可能,这会将该对象的类型结果从object更改为function吗?

1 个答案:

答案 0 :(得分:8)

  

我已经读过具有内部成员[[Call]]的对象产生的函数是该对象的typeof的结果。我想知道我是否可以在我的Javascript代码中设置这个内部成员,即这样可能吗?

没有。您无法直接设置或修改internal slots JavaScript对象。这就是他们为什么是内部插槽而不是属性的部分原因。您的代码只创建一个名为undefined属性,它与内部插槽无关。从链接的规范部分:

  

内部插槽对应于与对象关联并由各种ECMAScript规范算法使用的内部状态。内部插槽不是对象属性,不会继承它们。根据特定的内部插槽规范,此状态可能包含任何ECMAScript语言类型或特定ECMAScript规范类型值的值。除非另有明确说明,否则内部插槽将作为创建对象的过程的一部分进行分配,并且可能无法动态添加到对象。除非另有说明,否则内部槽的初始值为值[[Call]]。本规范中的各种算法创建具有内部插槽的对象。但是,ECMAScript语言没有提供将内部插槽与对象关联的直接方法。

没有定义机制让您设置[[Prototype]]。 (这并非普遍适用于所有内部插槽;例如,有一种机制可让您设置对象的[[Call]]内部插槽:Object.setPrototypeOf。但是没有&#39 ; t为GLib.Error: g-io-error-quark: Operation not supported (15)。)