以下代码
function a() {
}
var b=a;
b.x=1;
console.log(b);
输出仍然是
function a() {
}
我尝试将字段x
添加到函数a
,但似乎什么也没发生,b.x
在这里做了什么?
答案 0 :(得分:1)
在javascript中,一切都是一个对象,包括一个函数。
function a(){}
将定义一个函数
b=a;
会将此功能的引用分配给b
。不是新副本,只是参考。
b.x=1
会向其添加属性x
。这最终将意味着向a
本身添加密钥。
当您记录b
时,这将返回该函数,而不是相关的属性。您可以使用Object.keys(b)
或for(var key in b){}
访问各个密钥及其值。
function a() {}
b = a;
b.x = 1;
console.log(b, Object.keys(b))
答案 1 :(得分:1)
您正在将函数x
放在函数a
上,就像您可以在任何JS对象上放置属性一样。
将a
记录到控制台时,其x
属性不会显示,但它仍然存在,可以通过记录b.x
轻松看到。
在对象上放置属性并不常见,但在某些情况下它可能很有用。
答案 2 :(得分:1)
所有函数都是JavaScript中的第一类对象,这里b.x
实际上在函数b
中创建了一个新属性,但由于b
最初是一个函数变量,所以输出为console.log是function a() {}
,这是因为b.toString()
打印了这个(并且浏览器使用.toString在控制台上写入)
检查属性的方法是尝试Object.keys(b)
,这将打印["x"]
。
答案 3 :(得分:-1)
您无法为该功能添加属性。您可以向对象添加属性。因此,创建原型a的对象并将其传递给变量b。然后向对象添加属性。 E.g:
function a() {}
var b= new a();
b.x=1;
console.log(b);
输出:
a {x: 1}