В основном я пытаюсь понять и изучить принцип работы 'этого' ключевого слова в JavaScript.
Насколько я понимаю, что 'это' относится к объекту (функция), которая это внутри в тот момент.
Так, путем веры этому я хотел протестировать вывод простого кода ниже:
<body>
<input type="button" value="Add Age" onclick="Outer()" />
<script type="text/javascript">
function Outer(){
if(typeof this.Father == 'undefined')
{
this.Father = 0;
}
this.Father+=2;
alert(this.Father);
inner();
function inner(){
if(typeof this.Son== 'undefined')
{
this.Son = 0;
};
this.Son++;
alert(this.Son);
alert(this.Father);
};
};
</script>
</body>
И его вывод смущает меня. Поскольку во внутреннем () функция, это. Сын производит увеличенное целочисленное значение Сына. Но я ожидаю это. Родительский элемент для сбоя, потому что внутренний () не имеет атрибута.Father. Но вместо того, чтобы выдать исключение это предупреждает значение этого. Родительский элемент - Который кажется
В этой точке у меня есть 2 вопроса в моем уме на самом деле:
'Это' ключевое слово всегда относится к корпусу внешнего объема даже во внутренних функциях?
И не объявляя экземпляров 'это' ключевое слово ссылки, что в методе? (Я имею в виду, не имея чего-то lik var myFamily = new Outer()
)
Спасибо,
burak ozdogan
this
определяется шаблоном вызова, то есть тем, как вызывается объект функции.
Существует 4 различных вида шаблонов вызова:
вызов метода: функция определяется как свойство некоторого объекта и вызывается через объект с использованием уточнения, то есть .
.
a.func (); // this
относится к объекту, то есть a
.
вызов функции: простой вызов функции.
func (); // this
привязан к глобальному объекту.
Вызов конструктора: ну, это немного сложно. Так как конструкторы используются также как метод-конструктор для новых функциональных объектов new
, this
относится к создаваемому новому объекту функции.
var func = new Func (); // this
относится к func
, в то время как в конструкторе Func
)
применяется вызов:
func.apply (thisArg, argArray); // this
связан с первым аргументом
Другими словами, this
в вашем примере все относится к глобальному объекту (ваш onClick
call Другое ()
). Вместо этого вам следует попробовать использовать new Other ()
.