Может кто-нибудь объяснить этот кусок кода? Спасибо.Доступ к объектам JavaScript
alert({foo:"test foo", bar:"test bar"}.bar); // "test bar"
Может кто-нибудь объяснить этот кусок кода? Спасибо.Доступ к объектам JavaScript
alert({foo:"test foo", bar:"test bar"}.bar); // "test bar"
{foo:"test foo", bar:"test bar"}
Это создает новый объект с двумя свойствами, foo
и bar
. Если вы привыкли к Java или C# или C++ или язык, как это, это, как говорят
class FooAndBarObject {
public string foo;
public string bar;
public FooAndBarObject(string foo, string bar) {
this.foo = foo;
this.bar = bar;
}
}
new FooAndBarObject("test foo", "test bar");
Таким образом, то писать {foo:"test foo", bar:"test bar"}.bar
возвращает значение из bar
имущества, которое случается "test bar"
.
alert
- это функция, которая отображает переданное ему значение, поэтому оно будет отображать пользователю test bar
.
В Javascript нотация {} определяет объект, вы просто получаете свойство bar в этом случае. Он похож на класс на любом языке OO; и аналогичный следующему коду:
var obj = {
foo : 'Test Foo',
bar : 'test bar'
};
alert(obj.bar); //Show the 'bar' property of obj.
Декларация просто возвращает себя, очевидно, поэтому синтаксис, который вы показали, является законным. Однако это бесполезно, поскольку вы не можете ничего сделать с объектом, который вы только что определили.
У вас есть объект
с 2 объектами: foo, bar.
значение Foo является «тест Foo»
значение бар «тест-бар»
но покажите мне значение бара.
{Foo: "тест Foo", бар: "тест-бар"}. Бар
{foo:"test foo", bar:"test bar"}
создает новый объект с двумя полями: foo
и bar
alert(obj.bar)
выводит значение bar
поля этот вновь созданный объектВ вашем примере функция alert
вызывается с объектом как его параметром. Параметр конструирует объект «на лету» с двумя свойствами: foo
и bar
, затем обращается к свойству bar
, которое возвращает строку для отображаемой функции alert
.
У вас есть два бита кода там:
{foo:"test foo", bar:"test bar"}
Это литерал объекта: он определяет объект с двумя свойствами foo
и bar
, каждый из которых имеет строку в качестве значения.
.bar
Это оператор член: он получает член от объекта, имя которого bar
.
Я не могу представить себе потребительной случай для этого стиля кодирования ...
JS создает объект и сразу отображает свойство бар :) может быть полезным: http://json.org/
Синтаксис {foo:"test foo", bar:"test bar"}
называются JavaScript Object Notation (JSON), и это позволяет Java-объект, который будет построен с использованием с более кратким синтаксисом, то:
var obj = function() { this.foo = "test foo"; this.bar = "test bar"; };
var instance = new obj();
Таким образом, в приведенном выше примере, вы создаете Java объект сценария с двумя полями, а затем немедленно получает доступ к полю bar
.
Литерал объекта в javascript - это своего рода ассоциативный массив.
ли пары:
var a = {
key1: 'value1',
key2: 'value2',
"key #3": 'value3'
}
может содержать любой тип данных в значениях, Ключ должен быть строки, если они содержат специальные символы, пробелы или зарезервированные слова.
Доступ к значениям a
может быть от точки (как в ООП):
a.key1 == 'value1';
Но если ключ содержит специальные символы, описанные выше, вы можете получить доступ к значению означает a
вроде как ассоциативный массив;
a["key #3"] == 'value3'
Однако
a["key1"] ;
также правильно
Каждая декларация/назначение в JavaScript возвращает сам объект или назначить соответственно, так:
var a;
(a={
key1: 'value1',
key2: 'value2',
"key #3": 'value3',
key4: function(){
//`this` refers to `a` variable - if function will be called directly from `a` => a.key4() ;
alert(this["key #3");}
}).key1 // gets 'value1'
или
({ key1:'value1' })['key1'];// gets 'value1' too