2010-04-18 12 views
11

Ich habe folgende Javascript-CodeWie rufe ich Funktionen eines Objekts innerhalb desselben Objekts auf?

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]; 
    } 
} 

Aber wenn ich add_num.f() aufrufen, was ich von Alarm get() ist der eigentliche Code der Seite. Das heißt, es gibt

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

Ich erwartete einen numerischen Wert und überhaupt keinen Code.

+0

Sie rufen nicht wirklich die Funktion auf - übergeben Sie sie einfach als Objekt an "alert()". Probiere 'alert (this.page());'. –

Antwort

8

Das ist, weil Sie die page Funktion aufrufen müssen:

alert(this.page()); 

statt

alert(this.page); 
4

Sie alarmieren die Funktion selbst, nicht das Ergebnis der Ausführung. Sie sollten dies tun:

alert(this.page()); 
3

Der Grund dafür ist, dass eine wörtliche nicht eine Funktion ist, hat also keinen (sichtbaren) Konstruktor, also bezieht sich 'dieses' auf das aufrufende Objekt.

Natürlich ist das nicht wahr, wenn Sie dieses Literal dem Prototyp einer Funktion zuweisen, aber ich vermute, das ist hier nicht der Fall.

Auch Darin ist korrekt, Sie geben die Funktion zurück, nicht ausführen.

Beziehen Sie sich explizit auf das Objekt, z. 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

Ist es eine schlechte Übung, 'this' zu verwenden, um das Objekt explizit aufzurufen? – Blexy

Verwandte Themen