javascript - 函数属性的真正含义是什么

标签 javascript

对于下面的代码,我为对象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 的输出。

enter image description here

最佳答案

当您记录该函数时,您没有收到任何 isShiny 的痕迹,这纯粹是由于浏览器对 console.log 的实现造成的,与以下内容无关:发生在 JavaScript 的幕后。 console.log 发现该属性是一个函数,因此不会像“正常”对象一样将其记录下来。在这种情况下,console.dir 可能会更有用。有关 console.logconsole.dir 有何不同的更多信息,请查看 this question and its answers .

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

关于javascript - 函数属性的真正含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806557/

相关文章:

javascript - 在调整窗口大小时设置产品 slider 宽度以及 CSS 媒体查询

javascript - Jest URL.createObjectURL 不是函数

javascript - getJSON 和无效标签

javascript - 为什么 jQuery 在嵌套的 Ajax 函数中不起作用?

javascript - AngularJS:如何在页面完全加载之前显示预加载或加载?

javascript - 如何阻止一个innerHtml表格一遍又一遍地重复?

javascript - 如何使用javascript根据特定要求验证表达式?

java - 读取一个jsp传递给另一个jsp的参数

javascript - 给ngbind添加三个点

javascript - Ionic 带有地理位置警报 : 'mySecondApp.app/www/index.html' Would like to use your current location