对于下面的代码,我为对象/user/profile
提供了isShiny
,它被列为属性的一部分,它本质上是一个键值对,
密钥是obj
,
value是匿名函数。
但是当我为函数isShiny
提供isShiny
时,幕后真的发生了什么?当我打印出一个函数时,没有提示func
的位置。
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);
的输出。
答案 0 :(得分:3)
您在记录此功能时未获得任何isShiny
跟踪的原因完全是由于浏览器对console.log
的实施,而与#39}无关;在JavaScript中幕后发生的事情。 console.log
看到该属性是一个函数,因此不会像正常情况那样将其注销。宾语。在这种情况下,console.dir
可能会更有用。有关console.log
与console.dir
的区别的详细信息,请查看this question and its answers。
正如您已经正确地意识到的那样,在JavaScript中,函数本质上只不过是一个可调用对象 - 您可以像任何非函数对象一样分配和访问属性。
答案 1 :(得分:2)
使用console.dir
代替console.log
,并使用方法和属性记录函数对象。
相关问题:What's the difference between console.dir
and console.log
?