【问题标题】:How do javascript functions have properties in them?javascript函数如何具有属性?
【发布时间】:2018-08-10 10:17:26
【问题描述】:
function myFunc(){
    console.log(myFunc.message);
}
myFunc.message = "Hi John";

myFunc();

执行上述结果-

Answer: 'Hi John'

函数myFunc 上怎么有message 属性? typeof myFunc 产生“函数”,console.log(myFunc) 显示函数内容(上面没有message 属性)。

以上是如何工作的? JavaScript 中的函数内部是对象吗?

注意 - 我知道函数还有其他参数,例如原型和长度。但我也不确定这些是如何实现的。

附加查询 - 由于console.log(myFunc)不显示对象属性,如何列出函数对象的所有属性?

【问题讨论】:

  • 是的,JS 函数是对象,因此可以附加任意属性(不是参数)。
  • 你的标签 (javascript-objects) 已经回答了。
  • 此问题标题中的措辞阅读不正确。你能用英语正确地改写它,这样才有意义吗?! ;-)
  • 我认为您对语法 a.b , b 是一个属性而不是 a 的参数这一事实感到困惑。然后仍然使用不正确的措辞来描述您的问题。 Javascript 中的几乎所有内容都可以用对象表示法来表示。
  • @ChrisM 我对您的更正所做的唯一编辑是我删除了更正“参数/属性”,因为即使它是正确的术语,我也会避免更改它,因为它可能是 OP 的一部分误解。完成后,我只是添加了一些格式,但您的大部分编辑都在当前版本中进行。

标签: javascript javascript-objects


【解决方案1】:

以上是如何工作的? javascript中的函数内部是一个对象吗?

是的

function example() {};

console.log(example instanceof Object);

【讨论】:

    【解决方案2】:

    是的,they are objects

    具体看:

    每个 JavaScript 函数实际上都是一个 Function 对象。这可以通过代码(function(){}).constructor === Function 看到,它返回true

    【讨论】:

      【解决方案3】:

      在 JavaScript 中的函数是 first class objects。您可以将函数分配给变量、将其作为参数传递、向其添加属性、将其添加为属性或数组成员等事实证明了这一点。天空是极限。

      var myFunction = function(passedFunction){
              passedFunction();
              console.log(myFunction.message);
         };
      	 
      let functionsArray = [myFunction, function() {
             myFunction.message = "Hello World";
      }];
      	 
      functionsArray[0](functionsArray[1]);

      以上输出“Hello World”

      这看起来很奇怪的部分原因可能在于函数的声明方式。为了表现得有点像 C(但不是真的)或其他在执行代码之前以某种方式定义函数的语言,裸“函数”语句“提升”函数声明。所以你在哪里使用这个语法:

      myFunction();
      function myFunction(){ 
          console.log("Hello world");
      }
      

      实际发生的情况是,您的函数声明被“提升”,就好像它是这样的:

      let myFunction = function(){ 
          console.log("Hello world");
      }
      
      myFunction();
      

      上面这两个代码 sn-ps 在 JavaScript 中是基本等价的。 (注:var 声明也会被提升,但 letconst 不会)

      MDNhas more关于函数声明和函数提升。

      【讨论】:

        【解决方案4】:

        根据MDN,函数定义为:

        在 JavaScript 中,函数是一等对象,因为它们可以像任何其他对象一样具有属性和方法。它们与其他对象的区别在于可以调用函数。简而言之,它们是 Function 对象。

        所以在这里通过 myFunc.message 您正在向 myFunc 函数(或对象)添加一个附加属性,然后它可以像其他对象一样在函数内部访问。

        【讨论】:

          猜你喜欢
          • 2012-11-13
          • 1970-01-01
          • 1970-01-01
          • 2015-11-30
          • 1970-01-01
          • 2020-07-20
          • 2012-10-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多