0

Si j'ai une fonction procédure appelant une autre fonction procédurale comme ceci:Pourquoi méthodes prototypes d'objets ont pas l'appelant à oop contrairement à la programmation procédurale

function awesome() { 
    return arguments.callee.caller.name; 
} 
function ridiculous() { 
    return awesome(); 
} 
ridiculous(); 

Puis je reviens l'appelant nommé « ridicule ». Mais quand je l'écris dans un style oop, alors l'appelant est nul. Je me demande pourquoi cela se produit et comment récupérer l'appelant de toute façon.

Répondre

1

La clé dans l'objet et le nom de la fonction ne sont pas la même chose.

Jetez un oeil à mon extrait:

function myObj() {} 
 
myObj.prototype.awesome = function awesome() { 
 
    return arguments.callee.caller.name; 
 
} 
 
myObj.prototype.ridiculous = function ridiculous() { 
 
    return this.awesome(); 
 
} 
 

 
var o = new myObj(); 
 
console.log(o.ridiculous())

+0

idiot moi! Après avoir lu votre réponse, c'est complètement évident. Je vous remercie! – shaedrich

0

Il est parce que lors de la déclaration des méthodes sur le prototype que vous devriez utiliser les fonctions nommées.

tels que:

function myObj() {} 
myObj.prototype.awesome = function awesome() { 
    return arguments.callee.caller.name; 
} 
myObj.prototype.ridiculous = function ridiculous() { 
    return this.awesome(); 
} 

myObj.prototype.ridiculous() 
+0

Ah, merci. Je garderai ça à l'esprit :) – shaedrich