Этот оператор в 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
значение без изменений)