【问题标题】:What attribute of a function really means函数的属性真正意味着什么
【发布时间】:2015-12-24 17:24:09
【问题描述】:

对于下面的代码,我为对象obj提供isShiny,它被列为属性的一部分,本质上是一个键值对, 其中密钥是isShiny, value 是匿名函数。

但是当我为函数func 提供isShiny 时,幕后究竟发生了什么?当我打印出一个函数时,没有提示isShiny 在哪里。

 var obj ={} //this is an object
    obj.isShiny = function () {
        console.log(this);
        return "you bet1";
    };
    console.log(obj); 

    var func = function () {console.log(this)}; //this is a function
    func.isShiny = function () {
        console.log(this);
        return "you bet1";
    };
    console.log(func);

这是来自浏览器的console.log 的输出。

【问题讨论】:

  • 您能否添加您期望的结果?这篇文章没有具体的问题。真正的问题是知识问题(例如 JavaScript 是如何工作的?)还是您正在尝试解决的问题?

标签: javascript


【解决方案1】:

您在登录函数时没有得到任何isShiny 的踪迹的原因纯粹是由于浏览器对console.log 的实现,与JavaScript 中幕后发生的事情无关。 console.log 看到该属性是一个函数,因此不会像“普通”对象那样将其注销。在这种情况下,console.dir 可能会更有用。有关console.logconsole.dir 有何不同的更多信息,请查看this question and its answers

正如您正确地意识到的那样,在 JavaScript 中,函数本质上只不过是一个可调用对象——您可以像任何非函数对象一样分配和访问属性。

【讨论】:

    【解决方案2】:

    使用console.dir 而不是console.log,它会记录函数对象及其方法和属性。

    一个相关问题:What's the difference between console.dir and console.log?

    【讨论】:

      猜你喜欢
      • 2017-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      • 2010-09-14
      • 2011-12-06
      • 2015-12-11
      相关资源
      最近更新 更多