添加字段以使用成员分配功能

时间:2016-03-27 10:21:25

标签: javascript

以下代码

function a() {


}

var b=a;
b.x=1;
console.log(b);

输出仍然是

function a() {


}

我尝试将字段x添加到函数a,但似乎什么也没发生,b.x在这里做了什么?

4 个答案:

答案 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}