Rozważmy ten javascript obiektu:
{ "name" : "Joe",
"age" : "23"}
JavaScript jest słabo wpisane, można zastąpić "23" (string) z 23 (liczba):
{ "name" : "Joe",
"age" : 23}
Brak błędu, działa idealnie.
Właściwie można zastąpić 23 z czymkolwiek innym: logiczną
{ "name" : "Joe",
"age" : true}
inny obiekt
{ "name" : "Joe",
"age" : {"2014" : 22 , "2015": 23 } }
lub nawet funkcję
{ "name" : "Joe",
"age" : function(){ alert("23");} }
Sidenote: niektórzy ludzie nienawidzą Javascript za to, że jest tak niedbały. Inni ludzie (tak jak ja) uwielbiają Javascript z tego samego powodu, ponieważ ta elastyczność jest jej mocą (tą i byciem asynchrotnym).
można nazwać tego obiektu „osoba” i zapytać o jego imię i wiek:
var person = { "name" : "Joe",
"age" : function(){ alert("23");} }
console.log(person.name); // will log "Joe"
person.age(); // "age" is a function, so you need to call it. It will alert 23.
Teraz można utworzyć funkcję, która będzie zwracać tego obiektu:
function Person() {
return{
"name" : "Joe",
"age" : function(){ alert("23");},
sayHello : function() {
alert("Hello");
},
sleep : function() {
alert("I'm sleeping");
}
}
};
console.log(Person().name); // logs "Joe"
Person().age(); // alerts "23"
Person().sayHello(); // alerts "Hello"
Person().sleep(); // alerts "I'm sleeping".
age
, sayHello
i sleep
to funkcje, które są nazywane metodami funkcji Person
.
One zazwyczaj unika wywoływania Person()
wiele razy, i stworzyć new Person
zamiast:
var person = new Person();
person.sayHello(); // alerts "Hello"
person.sleep(); // alerts "I'm sleeping".
Metoda ta pozwala na tworzenie wielu osobom, parametrami przechodzącej:
function Person(name, age) {
return{
"name" : name,
"age" : function(){ alert(age);},
sayHello : function() { // sayHello or "sayHello", both work
alert("Hello, my name is "+ this.name);
},
sleep : function() {
alert("I'm sleeping");
}
}
};
var person = new Person("John", 25);
person.sayHello(); // alerts "Hello, my name is John"
person.age(); // alerts "25".
Ta metoda obecnie zastąpić zajęcia , że brakuje Javascript 5 (EcmaScript 5). Ale EcmaScript 6 wkrótce nadejdzie z odpowiednimi klasami.
możliwy duplikat [var functionName = function() {} vs function functionName() {}] (http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) – sobolevn
pytania nie są takie same. To nie jest dublat – Benas
Drugi to błąd składniowy. Nie możesz sam tego wypróbować? – Bergi