Node.js全局范围

时间:2017-05-28 16:22:53

标签: javascript node.js

以下是在全局范围级别的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(){}

为什么差异,以及响应中引用了什么功能?

1 个答案:

答案 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之外的任何东西,它就会抛出这个函数的实现问题。