2010-04-18 15 views
11

Tengo el siguiente código Javascript¿Cómo llamo a las funciones de un objeto dentro del mismo objeto?

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

Pero cuando llamo add_num.f() lo que recibo de alerta() es el código real de la página. Es decir, se vuelve

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

Me esperaba un valor numérico y no ningún código en absoluto.

+0

En realidad, no está * llamando * a la función, simplemente pasándola como un objeto a 'alert()'. Pruebe 'alert (this.page());'. –

Respuesta

8

Eso es porque hay que llamar a la función page:

alert(this.page()); 

en lugar de

alert(this.page); 
4

Alerta a la función, no el resultado de su ejecución. Usted debe hacer esto:

alert(this.page()); 
3

La razón es que un literal no es una función, por lo tanto, no tiene un constructor (visible) por lo que 'this' se referirá al objeto que llama.

Por supuesto, esto no es cierto si usa asignar este literal al prototipo de una función, pero supongo que este no es el caso aquí.

Además, Darin está en lo cierto, está devolviendo la función, no ejecutándola.

Simplemente haga referencia explícitamente al objeto, p. 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

¿Es una mala práctica usar 'this' sobre llamar al objeto explícitamente? – Blexy

Cuestiones relacionadas