2013-10-04 6 views
1

Я новичок в JavaScript и это кажется очень странным для меня ...Где находится переменная JavaScript?

function Employee() {} 
var emp = new Employee(); 
emp.name = "John Doe"; 
alert(emp.name); 

Я даже не знаю, что ключевое слово, чтобы произвести поиск по этому Где, «имя» переменная, будет находиться? глобальное пространство имен, государственная собственность или что-то еще?

+3

Я думаю * свойство публичной копии * лучше всего суммирует его. Каков ваш реальный вопрос? – Phil

+1

Это не переменная. Это свойство на объекте emp. Объект представляет собой набор пар ключ/значение, где ключи в конечном счете являются строками, а значения имеют любой тип. Таким образом, в вашем случае ключ является «именем», а значением является «John Doe». – user2736012

ответ

6

У вас здесь есть пара вещей, которые могут легко сбить кого-то нового в 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

+2

Фактически, «имя» является свойством ссылки на объект в 'emp' и не будет частью каких-либо других экземпляров' Employee() ', если оно также не назначено им. – jfriend00

+0

@ jfriend00 - уточнено. – Benmj

+0

что @ jfriend00 написал было совершенно правильно – Misters

Смежные вопросы