'это' ключевое слово относится к какой объект в функция в другой функции?

В основном я пытаюсь понять и изучить принцип работы 'этого' ключевого слова в 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 вопроса в моем уме на самом деле:

  1. 'Это' ключевое слово всегда относится к корпусу внешнего объема даже во внутренних функциях?

  2. И не объявляя экземпляров 'это' ключевое слово ссылки, что в методе? (Я имею в виду, не имея чего-то lik var myFamily = new Outer() )

Спасибо,

burak ozdogan

5
задан animuson 3 December 2011 в 03:37
поделиться

1 ответ

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

Существует 4 различных вида шаблонов вызова:

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

    a.func (); // this относится к объекту, то есть a .

  2. вызов функции: простой вызов функции.

    func (); // this привязан к глобальному объекту.

  3. Вызов конструктора: ну, это немного сложно. Так как конструкторы используются также как метод-конструктор для новых функциональных объектов new , this относится к создаваемому новому объекту функции.

    var func = new Func (); // this относится к func , в то время как в конструкторе Func )

  4. применяется вызов:

    func.apply (thisArg, argArray); // this связан с первым аргументом

Другими словами, this в вашем примере все относится к глобальному объекту (ваш onClick call Другое () ). Вместо этого вам следует попробовать использовать new Other () .

5
ответ дан 14 December 2019 в 19:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: