Этот оператор в JavaScript

Предположим, у меня есть код JavaScript, как

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

Для чего эти два объекта "это" относятся??

1 ответ

Решение

this значение в глобальном контексте выполнения, относится к глобальному объекту, например:

this === window; // true

Для функционального кода это действительно зависит от того, как вы вызываете функцию, например, this значение неявно устанавливается, когда:

Вызов функции без ссылки на базовый объект:

myFunc();

this Значение также будет ссылаться на глобальный объект.

Вызов функции, связанной как свойство объекта:

obj.method();

this значение будет относиться к obj,

С использованием new оператор:

new MyFunc();

this значение будет ссылаться на вновь созданный объект, который наследуется от MyFunc.prototype,

Кроме того, вы можете явно установить это значение при вызове функции, используя либо call или же apply методы, например:

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 или же apply является null или же undefined, this значение будет ссылаться на глобальный объект.

(обратите внимание, что это изменится в будущем, с ECMAScript 5, где call а также apply пройти thisArg значение без изменений)

Другие вопросы по тегам