Наиболее часто используемая фраза, "мы все соглашаемся взрослые здесь". Путем предварительного ожидания (скрываются) одинарное подчеркивание (не представляют) или двойное подчеркивание, Вы говорите пользователю Вашего класса о предположении участника, чтобы быть 'частными' в некотором роде. Однако Вы доверяете всем остальным, чтобы вести себя ответственно и уважать это, если у них нет неопровержимого довода не к (например, отладчики, кодируйте завершение).
, Если у Вас действительно должно быть что-то, что является частным, тогда можно реализовать его в расширении (например, в C для CPython). В большинстве случаев, однако, Вы просто изучаете Pythonic способ сделать вещи.
Это разные системы обозначений, которые можно использовать как взаимозаменяемые. Во многих ситуациях использование синтаксиса скобок []
может быть более привлекательным, например, при ссылке на объект с переменной.
var temp = "kid";
var obj = new Object();
obj[temp] = 5; // this is legal, and is equivalent to object.kid
obj.temp = 5; // this references literally, object.temp
Нет никакой разницы ни в одном из ваших образцов. Все они являются объектами с именованными свойствами. Вы только что показали разные способы создания / ссылки на эти свойства.
Они одинаковы.
вы можете использовать их как взаимозаменяемые.
Думаю, это все равно. Третья версия могла использоваться с именами динамических свойств. Первый - самый короткий для записи.
Они такие же. Так же, как []
и new Array ()
- одно и то же.
Для получения дополнительных сведений об основных типах JavaScript см. Справочник по MDC Core JavaScript 1.5 .
Если вам нужно доказательство того, что {}
совпадает с new Object ()
:
Object.prototype.helloWorld = function () { alert('Foo!'); };
var a = new Object();
var b = {};
a.helloWorld();
b.helloWorld();
!!! ПРЕДУПРЕЖДЕНИЕ АКТУАЛЬНОЕ ПРЕДУПРЕЖДЕНИЕ !!! Никогда и никогда не назначать свойство prototype
типа Object
в производственном коде. Вы загрязните все глобальное пространство имен.
На самом деле в JavaScript нет ничего, что называется «хеш-таблицей» или «хеш-картой». Объект в JavaScript ведет себя как «хэш» [объекты в JavaScript - это просто свойства типа ключ / значение], и отсюда возникает путаница.
Фактически, каждый объект в JavaScript ЯВЛЯЕТСЯ хешем. Это хеш свойств и методов объекта. Фактически, все в Javascript является хешем (т.е. списком пар имя / значение).
Каждый раз, когда вы вызываете метод объекта, свойство или просто ссылаетесь на любую переменную, вы выполняете внутренний поиск хэша.
Технически они одинаковые. При написании кода можно легко сделать myobject['someproprty' + 'somethingElseConcatenated'
, чего нельзя сделать при использовании "точечной нотации" - myobject. Someproperty
- это все, что можно сделать.
Дуглас Крокфорд, один из авторов ECMA-скрипта, предлагает не использовать var a = новый синтаксис Object()
по какой-то причине я почему-то не совсем уловил. В любом случае, стоит посмотреть его презентацию, если вам интересно (она состоит из нескольких частей, первая находится здесь http://video.yahoo.com/watch/111593/1710507)
В других языках, таких как Java и C#, в качестве ключа в хэш-таблице/хэш-карте можно использовать любой объект (не только строку или число), чего нет в JavaScript: ключи просто преобразуются в строки.
var h = {}, k = {};
h[k] = "One";
alert( h[ "[object Object]" ] ); // Alerts "One"
В качестве ключей можно использовать произвольные объекты, в этом случае можно использовать что-то вроде jshashtable.
Отказ от ответственности: я написал jshashtable.
.