Javascript,从静态函数中打印全局对象

Javascript, print the global object from a static function

本文关键字:打印 全局 对象 静态函数 Javascript      更新时间:2023-09-26

使用以下代码,如何调用方法my_method以打印全局对象(窗口)?

 MyClass = function() {
      this.my_method = function() {
         console.log(this);
      }
  }
  var myobject = new MyClass();

这不是一个家庭作业,而是一个我被问到的问题,我无法理解,因为我不懂深层JavaScript。

所以,如果有人能帮助我理解并给我一个解释清楚的答案,我会很高兴的!

您可以将函数绑定到null:

MyClass = function() {
      this.my_method = function() {
         console.log(this);
      }
  }
  var myobject = new MyClass();
  myobject.my_method = myobject.my_method.bind(null);
  myobject.my_method(); // this will log the DomWindow object

这是因为当函数的上下文为null或未定义时,this是全局对象。

来自ECMAScript参考:

  1. 如果函数代码是严格代码,请将ThisBinding设置为thisArg
  2. 否则,如果thisArg为null或未定义,请将ThisBinding设置为全局对象

您还可以使用callapply来更改函数的上下文。

var myobject = new MyClass();
myobject.my_method.call(this);
myobject.my_method.apply(this); 

如果您不需要永久绑定或希望动态更改上下文,这可能会很好地工作。