javascript中的这个运算符

IT技术 javascript this
2021-02-12 17:21:06

假设我有这样的 JavaScript 代码

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

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

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之间的区别在于apply,使用apply,您可以使用数组或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, wherecallapplypassthisArg值无需修改)