Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Кто знает javascript, помогите пожалуйста разобраться, а то мозги кипят уже. Пример на скриншоте

WinRAR Мыслитель (5877), закрыт 4 года назад
Почему иногда свойство объекта объявляют через this, а иногда через var/let. и в чем разница?

Например почему на скриншоте firstName и surname объявлены через var?
Видел примеры, где например пишут не var firstName, а this.firstName. В чем здесь роазница?
Лучший ответ
ян ег Гуру (4225) 4 года назад
функция это одновременно объект, когда в внутри нее ты пишешь this, ты обращаешься к себе же (функции) как к объекту, и можешь устанавливать поля. Когда ты пишешь вар это как бы просто переменная в теле функции, ты не можешь к ним обратиться из вне, ибо это не свойства объекта функции.
WinRARМыслитель (5877) 4 года назад
То есть var firstName это приватное свойство нашего объекта User, верно?
Тогда как переписать такой же код но по стандарту ES6 с использованием classs, ведь там как я понял, в constructor, нельзя var использовать, ибо там все переменные объявляются через this?
ян ег Гуру (4225) WinRAR, можно воспринимать и так, объектная модель в javascript прототипная, а она отличается от классических ООП языков. var в функциях всегда можно было писать, это просто переменная в функции, и создатели языка не делали это как приватное свойство, просто из за области видимости ее нет вне функции. Но те функции внутри функции (как бы методы) ее видят, потому что она в их зоне видимости. Насколько я знаю в ES6 нет приватных полей.
Остальные ответы
Ordo Seclorum Оракул (58396) 4 года назад
Уууу, эт сложно объяснить.
Во-первых, это не просто функция, а функция-конструктор. Её название принято писать с большой буквы.
Когда её вызываешь, (var user = new User();), то создаётся объект user со всеми свойствами, что в ней находятся. В том числе функции присвоения имени и фамилии - они тоже являются как бы свойствами этого объекта. То есть являются методами!

this означает контекст, внутри которого создаются эти свойства. ЭТОТ контекст. Для объекта user контекстом this будет сам user. Но он может быть и любым другим!

Можно например создать var admin = new User();
Тогда новый объект admin будет иметь все те же свойства, только this'ом для него будет являться уже admin
WinRARМыслитель (5877) 4 года назад
Когда мы создаем экземпляр нашей функции-конструктора, из этого экземпляра мы не сможем дотянуться до переменных объявленных как var? А если бы вместо var они были объявлены как this, то есть вместо var firstName было бы this.firstNameто, в таком случае смогли бы, верно?
Ordo Seclorum Оракул (58396) Да, если попробовать дотянуться до такой переменной извне, будет undefined. Экземпляр объекта созданного конструктором называется инстансом, или инстанс-объектом (англ. "мометнальным")
Похожие вопросы