Запутался в свойствах / полях объекта Javascript - PullRequest
0 голосов
/ 11 апреля 2011

Я пытаюсь научиться применять объектно-ориентированные принципы к моему программированию на Javascript, однако я не совсем понимаю, как объектные "поля" или "методы" работают в Javascript.Я понимаю, что свойства могут быть динамически назначены объектам (функциям) Javascript, но я не понимаю, как применять это на практике.

Рассмотрим следующий пример кода:

<head>
<script type="text/javascript">

var foo = function()
{
    this.bar = "abc";
    alert(this.bar);
}

foo.start = function()
{
    alert(foo.bar);
}

</script>
</head>

<body>
<div align='center'>
<input type="submit" onclick = "foo(); foo.start();">

При нажатии кнопки отправки отображается сообщение abc, за которым следует undefined.

Этот вывод противоречит моему пониманию и намерению.Насколько я понимаю, строка this.bar = "abc" создает новое свойство (или поле) bar объекта foo и присваивает ему значение "abc".Однако когда я вызываю другой метод foo, свойство bar, похоже, исчезло.

Итак, почему foo.bar не определен, когда я получаю к нему доступ в foo.start?

1 Ответ

3 голосов
/ 11 апреля 2011

Функции JavaScript выполняются в контексте, который определяет, на что this ссылается внутри функции.Когда вы создаете новый foo объект, подобный этому:

var f = new foo();

... тогда this ссылается на новый объект.Однако, когда оператор new опущен, например:

var f = foo();

..., тогда контекст является глобальным объектом window.В этом случае эта строка:

this.bar = "abc";

... устанавливает значение свойства на window, , а не новый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...