Это из-за характеристики Javascript, известной как закрытие. В основном это означает, что если объекты вложены, тогда внутренние объекты могут обращаться к переменным только из объектов вне их. Используя это ключевое слово, вы по существу превращаете переменную в свойство этого объекта. Переменные, объявленные с помощью var, не будут доступны для объектов, которые выложили метод. Для интересного чтения, пожалуйста, проверьте эту ссылку
http://javascript.crockford.com/private.html
Вот пример объекта с частным переменным и некоторыми общедоступными методами и собственностью. Эти характеристики полезны, поскольку они ограничивают использование объекта. В этом примере ниже мы не хотим разработчиков подделки с массивом, чтобы мы могли просто дать им объект, чтобы добавить, средство для удаления, и они могут видеть только четные индексы: -
function SpecialArray() {
var _array = [];
this.length = _array.length;
this.add = function(stuff) {
// add some stuff to it
}
this.remove = function(stuff) {
// take some stuff out of it
}
this.displayEvenNumbers = function(){
for (var i=0; i< _array.length ; i+=2){
console.log(_array[i]);
}
}
}
Поскольку 'john' не имеют свойство 'bankBalance'. Переменная 'bankBalance' в функции конструктора' Person' недоступна вне нее (из-за правил определения области JavaScript.) Кроме того, JS не поддерживает языковую поддержку для частных свойств; хотя для их имитации можно использовать замыкания. –
Одна вещь, которая стоит иметь в виду для начинающих, заключается в том, что в JS нет «класса». Вместо этого JS использует прототипы. Когда вы выполняете 'var bankBalance', он не похож на Java, который объявляет свойство-член, он определяет только локальную переменную. Чтобы добавить свойство, вы должны фактически изменить свойство экземпляра ('this.bankBalance') или изменить его через прототип (' Person.prototype.bankBalance = 7500'). –
Спасибо всем. Теперь я немного знаю, как работает Js –