一尘不染

JavaScript中的此运算符

javascript

假设我有如下JavaScript代码

      myClass = function(){
          function doSomething(){
              alert(this); // this1 
          }
      } 
      alert(this); //this2

这两个“ this”对象是指什么?


阅读 258

收藏
2020-05-01

共1个答案

一尘不染

this全局执行上下文中的值引用全局对象,例如:

this === window; // true

对于功能代码,实际上取决于您如何调用该功能,例如,在以下this情况下隐式设置该值:

调用没有 基础对象 引用的函数

myFunc();

this值还将引用全局对象。

调用绑定为对象属性的函数

obj.method();

this值将参考obj

使用new运算符

new MyFunc();

this值将引用从继承的新创建的对象MyFunc.prototype

另外,可以在调用函数时使用callapply方法显式设置该值,例如:

function test(arg) {
  alert(this + arg);
}
test.call("Hello", " world!"); // will alert "Hello World!"

call和之间的区别applyapply,您可以使用Array或arguments对象正确传递任意数量的参数,例如:

function sum() {
  var result = 0;
  for (var i = 0; i < arguments.length; i++) {
    result += arguments[i];
  }
  return result;
}

var args = [1,2,3,4];
sum.apply(null, args); // 10

// equivalent to call
sum(1,2,3,4); // 10

如果第一个参数的值call或者applynullundefined,该this值将引用全局对象。

(请注意,将来这会随着ECMAScript 5的变化而改变,callapplythisArg不更改的情况下传递值)

2020-05-01