У вас здесь есть пара вещей, которые могут легко сбить кого-то нового в Javascript. Давайте разложим сценарий по строкам.
function Employee() {}
Это определение новой функции конструктора, который будет создавать Employee
объекты. В настоящее время функция очень мало.
var emp = new Employee();
Здесь мы создаем объект Employee с new
ключевого слова и присвоить его переменной emp
. Он будет содержаться в пределах той области, в которой он объявлен - в этом случае - глобальной области.
emp.name = "John Doe";
Мы установили свойство name
локального объекта emp
быть "John Doe". Это может показаться странным, если вы исходите из языка, который требует более ясного описания объектов. Javascript не заботится о том, чтобы свойство «name» никогда не упоминалось в вашем объекте-конструкторе. Итак, совершенно здорово назначить свойство «name» на emp
. Одним из недостатков этого является то, что если вы делаете другие экземпляры Employee
, они не обязательно будут иметь свойство name
.
alert(emp.name);
Используйте функцию оповещения обозревателя, чтобы показать нам имя «John Doe».
Таким образом, чтобы ответить явно, name
является «общедоступным» свойством emp
(экземпляр Employee), в том смысле, что другие люди могут читать/писать напрямую. Javascript не имеет способа явно объявлять вещи общедоступными или частными. Чтобы получить такое поведение, вы должны полагаться на шаблоны проектирования. Если вы хотите подражать общедоступным/частным объектам, вы можете рассмотреть шаблон «Выявление», который Адди Османи излагает в своей действительно большой книге. Learning Javascript Design Patterns
Я думаю * свойство публичной копии * лучше всего суммирует его. Каков ваш реальный вопрос? – Phil
Это не переменная. Это свойство на объекте emp. Объект представляет собой набор пар ключ/значение, где ключи в конечном счете являются строками, а значения имеют любой тип. Таким образом, в вашем случае ключ является «именем», а значением является «John Doe». – user2736012