2010-04-18 16 views
11

Mam następujący kod JavaScriptJak wywołać funkcje obiektu wewnątrz tego samego obiektu?

add_num = { 
    f: function(html, num) { 
    alert(this.page); 
    }, 

    page : function() { 
    return parseInt(this.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 

Ale gdy zgłoszę add_num.f(), co otrzymuję od alert() jest rzeczywisty kod strony. Oznacza to, że zwraca ona

function() { 
    return parseInt(this.gup('page')); 
    } 

Spodziewałem się wartości numerycznej, a nie żadnego kodu.

+0

W rzeczywistości nie * wywołujesz * funkcji - po prostu przekazujesz ją jako obiekt do 'alert()'. Spróbuj 'alert (this.page());'. –

Odpowiedz

8

To dlatego, że trzeba zadzwonić do page funkcja:

alert(this.page()); 

zamiast

alert(this.page); 
4

Ostrzegasz samą funkcję, a nie wynik jej wykonania. Należy to zrobić:

alert(this.page()); 
3

Powodem jest to, że literalna nie jest funkcją, w ten sposób nie ma (widocznego) konstruktora, więc "this" będzie odnosić się do obiektu wywołującego.

Oczywiście nie jest to prawdą, jeśli użyjesz tego dosłowności do prototypu funkcji, ale domyślam się, że tak nie jest.

Również Darin ma rację, zwracasz funkcję, nie wykonując jej.

Wystarczy odnieść się bezpośrednio do obiektu, np. add_num.page().

add_num = { 
    f: function(html, num) { 
    alert(add_num.page()); 
    }, 

    page : function() { 
    return parseInt(add_num.gup('page')); 
    }, 

    gup : function(name) { 
    name = name.replace(/[\[]/,'\\\[').replace(/[\]]/,'\\\]'); 
    var regex = new RegExp('[\\?&]'+name+'=([^&#]*)'); 
    var results = regex.exec(window.location.href); 
    if(results == null) 
     return ''; 
    else 
     return results[1]; 
    } 
} 
+0

Czy jest złą praktyką użycie 'this' zamiast wywoływania obiektu jawnie? – Blexy

Powiązane problemy