Что означает «это», когда функция, которая его использует, называется «new myFunction (« Hello »)» - PullRequest
1 голос
/ 29 декабря 2010
function myFunction(message)
{
this.message = message;
return this.message;
}

document.body.innerHTML = new myFunction("Hello");

Я узнал, что «в JavaScript this всегда относится к« владельцу »функции, которую мы выполняем, или, скорее, к объекту, для которого функция является методом». ссылка

В этом примере может показаться, что this в myFunction должен ссылаться на владельца myFunction, то есть окна. Похоже, что это относится к myFunction, хотя. Почему это?

Ответы [ 2 ]

1 голос
/ 29 декабря 2010

Когда вы используете оператор new, вы создаете новый экземпляр объекта, определенного в функции конструктора , а this ссылается на новый объект.

Старый ответ до полного изменения вопроса путем добавления нового ключевого слова:

Поскольку myFunction не вызывается с ключевым словом new или в явном контексте другого объекта, это эффективно: document.body.innerHTML = window.myFunction("Hello");

То есть this - это объект window.

Вы можете подтвердить это, отредактировав функцию в console.log независимо от того, что this есть, а затем заглянув в Firebug.

0 голосов
/ 29 декабря 2010

Если вы вызываете new myFunction("hello"), тогда this ссылается на новый «пустой» объект (он не относится к функции!), Который наследуется от свойства прототипа функции (myFunction.prototype).

Такая функция также называется функцией конструктора, и принято начинать имя с заглавной буквы.

...