вызов внутренней переменной функции - PullRequest
1 голос
/ 04 августа 2011

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

почему это работает

function bla(){this.a = 1}
b = new bla
alert (b.a)

а это не

function bla(){this.a = 1}
alert (bla.a)

Ответы [ 4 ]

3 голосов
/ 04 августа 2011

Поскольку вы должны вызывать функцию, чтобы определить переменную.

Если вы хотите сделать то, о чем говорите, вы можете использовать литерал объекта

var bla = 
{
  a: 1,

  displayA: function() {
    alert(bla.a);
  }
};

alert(bla.a); // Displays 1
bla.displayA(); // Displays 1
2 голосов
/ 04 августа 2011

Вы должны создать новый экземпляр объекта. В этом случае первый работает, потому что вы объявляете

b = new bla

Просто дополнительный совет, вам следовало бы написать так, чтобы избежать возможных ошибок ...

function bla(){this.a = 1;}
b = new bla();
alert(b.a);
0 голосов
/ 04 августа 2011

Что не было указано, так это то, что в случае:

function bla(){this.a = 1}
alert (bla.a)

bla не был вызван ни как конструктор, ни как метод объекта, поэтому его Это ключевое слово установлено на объект global / window.Следовательно, к глобальному / оконному объекту добавляется свойство a , и вы можете сделать:

alert(a)

, но обычно это нежелательный результат.В строгом режиме ES5 при таком вызове функции ключевое слово this будет undefined , поэтому this.a выдаст ошибку.

0 голосов
/ 04 августа 2011

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

Вы можете сделать это, что также вернет 1:

function bla(){ return 1;}
alert (bla());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...