2015-06-09 11 views
7

Jaka jest różnica między deklaracją funkcji "function test()" i "test: function()" w javascript?Deklaracja funkcji JavaScript. Colon w deklaracji funkcji

function test() { 

} 

vs

test: function() { 

} 



W var functionName = function() {} vs function functionName() {} funkcji zapytania zostały uznane jak:

function test() { 

} 

i

var test = function() { 

}; 

Z perspektywy perspektywy funkcje składni na moim pytaniu nie wyglądają tak samo.

+2

możliwy duplikat [var functionName = function() {} vs function functionName() {}] (http://stackoverflow.com/questions/336859/var-functionname-function-vs-function-functionname) – sobolevn

+1

pytania nie są takie same. To nie jest dublat – Benas

+0

Drugi to błąd składniowy. Nie możesz sam tego wypróbować? – Bergi

Odpowiedz

8

function test() to normalna deklaracja funkcji, do której można zadzwonić bezpośrednio za pomocą nazwy funkcji. Podczas gdy test: function() jest funkcją zdefiniowaną wewnątrz jakiegoś obiektu, więc musi zostać wywołana przy użyciu obiektu, na którym jest zdefiniowana.

Przykład

deklaracja funkcji

function test() { 
    alert('In Test'); 
} 

test(); // Calling test 

Metoda

var myObj = { 
    test: function() { 
     alert('Inside test'); 
    } 
}; 

myObj.test(); // Calling test 
6

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.

+3

to świetne wprowadzenie do klas JS, ale nie odpowiada na pytanie OP. –

Powiązane problemy