javascript 向函数添加属性

IT技术 javascript function
2021-03-07 06:13:28

假设我们有一个函数。

function Rabbit(){
  console.log("shiv");
}

现在无需创建此函数的对象,我就可以分配此对象的属性

Rabbit.bark = function(line) {
 console.log("name is", line);
};

这是什么意思。这样做会为函数添加一个变量 bark。或者这Rabbit是否会对象添加属性,即使我没有使用new运算符创建对象

2个回答

JavaScript中的函数只是一个对象,它被称为Function对象。

就像任何其他类型的对象一样,它有自己的构造函数 ( new Function(...))、方法 ( apply, bind, call...) 和属性 ( arguments, caller, name...) 。请参阅文档

您可能熟悉创建这样的函数:

function Rabbit() {
    console.log('shiv');
}

那么你应该知道你也可以创建一个这样的函数:

var Rabbit = new Function('console.log("shiv")');

现在,你可能猜到了。如果向 Function 对象添加新属性,只要不覆盖现有属性,该函数仍然可以正常工作。

这样做会添加一个变量 bark 以发挥作用

  • 不,该函数有自己的闭包,向函数添加变量的唯一方法是this使用Rabbit.bind(object)

这样做向 Rabbit 对象添加了一个属性

  • 好吧,既然“兔子对象”只是一个对象,是的。
我看不出展示new Function案件的目的
2021-04-24 06:13:28
我编辑了这个例子,使其与问题的语义更相关。
2021-04-30 06:13:28
@torazaburo 只是试图强调这Rabbit只是一个由new Function.
2021-05-03 06:13:28
如果我创建了一个 Rabbit 实例,我将无法访问属性“bark”。这是什么问题。。有人可以解释一下吗?function Rabbit(){ console.log("shiv"); } Rabbit.bark = function(line) { console.log("name is", line); }; var m = new Rabbit(); m.bark("测试"); VM135:1 Uncaught TypeError: m.bark 不是 <anonymous>:1:3 的函数
2021-05-13 06:13:28

这是什么意思。这样做会为函数添加一个变量 bark。或者这样做向 Rabbit 对象添加了一个属性

这样做会为函数添加一个变量 bark -

或者这样做向 Rabbit 对象添加了一个属性-

bark 是Function类型的对象的属性

即使我没有使用 new 运算符创建对象

Rabit 已经是一个对象(类型Function)。您不是在创建此对象的实例,只是向其添加属性。