javascript将属性添加到功能

shi*_*arg 10 javascript function

让我们说我们有一个功能.

function Rabbit(){
  console.log("shiv");
}
Run Code Online (Sandbox Code Playgroud)

现在没有创建此函数的对象,我可以分配此对象的属性

Rabbit.bark = function(line) {
 console.log("name is", line);
};
Run Code Online (Sandbox Code Playgroud)

这是什么意思.这样做可以添加变量bark来实现功能.或者这Rabbit是否向对象添加属性,即使我没有使用new运算符创建对象.

Tru*_*gDQ 7

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

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

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

function Rabbit() {
    console.log('shiv');
}
Run Code Online (Sandbox Code Playgroud)

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

var Rabbit = new Function('console.log("shiv")');
Run Code Online (Sandbox Code Playgroud)

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

这样做添加一个变量 bark 到函数中

  • 不,函数有自己的闭包,向函数添加变量的唯一方法是将其绑定到this对象Rabbit.bind(object)

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

  • 好吧,既然“兔子对象”只是一个对象,是的。