对于下面的代码,我为对象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
的输出。
最佳答案
当您记录该函数时,您没有收到任何 isShiny
的痕迹,这纯粹是由于浏览器对 console.log
的实现造成的,与以下内容无关:发生在 JavaScript 的幕后。 console.log
发现该属性是一个函数,因此不会像“正常”对象一样将其记录下来。在这种情况下,console.dir
可能会更有用。有关 console.log
与 console.dir
有何不同的更多信息,请查看 this question and its answers .
正如您已经正确认识到的那样,在 JavaScript 中,函数本质上只不过是一个可调用对象 - 您可以像任何非函数对象一样分配和访问属性。
关于javascript - 函数属性的真正含义是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32806557/