以下是在全局范围级别的node.js中执行的调试器查询和响应列表:
this.toString()
"[object Object]"
Object.getPrototypeOf(this).toString()
"[object Object]"
Object.getPrototypeOf(Object.getPrototypeOf(this))
null
this.constructor
function Object() { [native code] }
Object.prototype.toString()
"[object Object]"
Object.prototype.toString.call(this)
"[object Object]"
Function.prototype.toString()
"function () {}"
Function.prototype.toString.call(this)
TypeError: Function.prototype.toString is not generic
第一组响应表明全局范围由扩展Object.prototype的对象表示,如预期的那样。所以我希望在这个上调用Function.prototype的 .toString()会失败,就像它确实一样(参见上一个查询)。我期待之前的查询传递一个隐式 this ,因此同样失败,但它返回 function(){} 。
为什么差异,以及响应中引用了什么功能?
答案 0 :(得分:0)
在函数调用中,this
绑定到“调用函数”的对象或全局对象,例如:
const obj = {
foo() {
console.log(this);
},
};
obj.foo(); // this is bound to obj
const obj2 = {};
obj2.bar = obj.foo;
obj2.bar(); // this is bound to obj2
const g = obj.foo;
g(); // this is bound to the global object
因此,Function.prototype.toString()
与Function.prototype.toString.call(Function.prototype)
完全相同。如果调用除Function之外的任何东西,它就会抛出这个函数的实现问题。