【问题标题】:javascript adding property to functionjavascript添加属性到函数
【发布时间】:2016-03-03 04:45:43
【问题描述】:

假设我们有一个函数。

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

现在不用创建这个函数的对象,我可以分配这个对象的属性

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

这是什么意思。这样做会添加一个变量树皮来发挥作用。或者这是否会向Rabbit 对象添加一个属性,即使我没有使用new 运算符创建对象。

【问题讨论】:

  • 函数是对象,bark是对象的属性。 bark 不是传统方法,但是如果您将newprototype 添加到组合中,那么bark 将是一种实例方法。照原样,如果您只是将new 添加到上面的代码中,则从.bark 到任何实例都没有连接,但是您可以将bark 作为静态方法,例如Array.isArray()
  • 把函数想象成一个对象,类似 {name: "Rabbit", length: 0, body: "code here", arguments: [], this: {}, _closures: {}, call: function call()... }如果你愿意,你可以自己添加新属性。
  • 所以我可以说当我调用函数时,例如 console.log(rabbit()) 我正在调用该对象的某些特定属性
  • 是的,基本上函数的.call() 方法就是您调用它的方式。足够近。书呆子,您可以在实际调用/使用的规范中阅读到函数内部的内部隐藏属性,而不是用户端端点(实例方法)
  • 嗨@shivgarg,如果您认为我的回答有帮助,您可以将其标记为已接受的答案,以帮助其他人快速找到它。谢谢。

标签: javascript function


【解决方案1】:

Function在JavaScript中只是一个对象,它被称为Function对象。

就像任何其他类型的对象一样,它有自己的构造函数(new Function(...))、方法(applybindcall...)和属性(argumentscallername...)。 See the document.

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

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

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

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

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

这样做会为函数添加一个变量树皮

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

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

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

【讨论】:

  • 我看不出展示new Function案例的目的。
  • @torazaburo 只是试图强调Rabbit 只是一个由new Function 创建的对象。
  • 我编辑了示例,使其与问题的语义更相关。
  • 如果我创建了 Rabbit 的实例,我将无法访问属性“bark”。什么问题..有人可以解释吗?功能兔子(){ console.log(“shiv”); } Rabbit.bark = function(line) { console.log("name is", line); }; var m = 新兔子(); m.bark("测试"); VM135:1 Uncaught TypeError: m.bark is not a function at :1:3
【解决方案2】:

这是什么意思。这样做会添加一个变量树皮来发挥作用。或者做 这为 Rabbit 对象添加了一个属性

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

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

bark 是 Function 类型对象的属性

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2017-08-26
    • 2013-04-25
    • 2023-01-20
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多