Javascript函数属性

Bai*_*kev 4 javascript

为什么我可以在javascript中执行以下操作:

function a() {};
a.foo = 30;
Run Code Online (Sandbox Code Playgroud)

具体来说,为什么我可以在函数a上设置属性?毕竟,我不能这样做:

var a = 20;
a.foo = 30;
Run Code Online (Sandbox Code Playgroud)

小智 6

你真的不能这样做,因为这是一个语法错误

function a = function() {};
Run Code Online (Sandbox Code Playgroud)

我想你只想说:

function a() {}
Run Code Online (Sandbox Code Playgroud)

无论如何.您无法从数字中获取属性的原因是它不是真正的对象.

a = 20;
a.foo = 30;   // this works
alert(a.foo); // this alerts nothing
Run Code Online (Sandbox Code Playgroud)

信不信由你,字符串也是如此:

a = "ohai";
a.foo = 30;   // this works
alert(a.foo); // this alerts nothing
Run Code Online (Sandbox Code Playgroud)

但是,如果它是String对象,那么它按预期工作:

a = new String("ohai");
a.foo = 30;   // this works
alert(a.foo); // this alerts 30
Run Code Online (Sandbox Code Playgroud)

或者如果它是一个Number对象.你明白了.

字符串和数字文字不是Javascript中的对象.这就是原因.