этот оператор в JavaScript - PullRequest
       17

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

2 голосов
/ 23 июля 2010

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

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

Что означают эти два объекта "this" ??

1 Ответ

15 голосов
/ 23 июля 2010

Значение 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 без изменений)

...