2

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

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

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

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

4

2 回答 2

4

您可以将函数绑定到 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

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

ECMAScript 参考

  1. 如果函数代码是严格代码,则将 ThisBinding 设置为 thisArg。
  2. 否则,如果 thisArg 为 null 或未定义,则将 ThisBinding 设置为全局对象。
于 2012-09-10T08:57:51.863 回答
2

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

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

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

于 2012-09-10T09:01:53.227 回答