Używam / wywołując funkcje z takich obiektów:

var object = { 
    fn: function(){ 
        alert('i can see it!'); 
    }
}; 
object.fn(); // it works

Ale nie wiem, jak nazywać funkcję z obiektu Mere {X0}}.

{
    fn: function() {
        alert('i can\'t see it');
    }
}

fn(); // wont work ?

Chcę wiedzieć, dlaczego to nie działa? Czy istnieje sposób, aby to działało?

1
user2168042 30 listopad 2013, 20:09

4 odpowiedzi

Najlepsza odpowiedź

Twój drugi przykład jest nieprawidłową składniową. {} jest interpretowany jako instrukcja blokowa z etykietą i nieprawidłową funkcją, ponieważ nie ma nazwy.

Jeśli chcesz to zrobić w takim razie, potrzebujesz czegoś więcej:

({
    fn: function() {
        alert('now i can see it');
    }
}).fn();

Teraz tworzysz obiekt, ponieważ {} nie może być już instrukcją blokową, ale zamiast tego jest literalna składnia obiektu. Następnie natychmiast uzyskujesz dostęp do fn.

Oczywiście jest to mały punkt, ale jest bliżej tego, co robiłeś.

4
Blue Skies 30 listopad 2013, 16:13

Oto właściwa składnia, aby zdefiniować funkcję "samodzielnej" (bez obrotu):

var fn = function () { ... };
function fn() { ... };
0
leaf 30 listopad 2013, 16:23

Fn jest wewnątrz bloków, a nie wewnątrz obiektu. Przekazanie wartości nazwy tylko wewnątrz bloków IE {} nie działa. Lub co najmniej daj jakąś etykietę do bloku.

3
Akshat 30 listopad 2013, 16:18

Nazwij to tak: object.fn();. Jak powiedział @blueskies, drugi przykład nie będzie działał, ponieważ jest to nieprawidłowa składnia. Nie możesz tego zrobić w JavaScript. Jeśli nazwijasz ten obiekt, taki jak David powiedział w komentarzach, to będzie działać. Nie możesz nazwać funkcji z anonimowego obiektu.

Oto przykład z obiektem, który nazywa się e: http://jsfiddle.net/dhf5k/< 2/a >.

0
tjons 30 listopad 2013, 16:12