2010-05-31 7 views
3

l'appelant d'une fonction Est-il possible d'obtenir le this que caller de fonction a été appelée avec JavaScript sans passer this aux arguments d'une manière qui prend en charge les IE ainsi que Firefox/Chrome et al?obtenir le « ce » qui a été appelé avec JavaScript

Par exemple:

var ob = { 
    callme: function() { 
     doSomething(); 
    } 
} 
ob.callme(); 

function doSomething() { 
    alert(doSomething.caller.this === ob); // how can I find the `this` that 
              // `callme` was called with 
              // (`ob` in this case) without 
              // passing `this` to `doSomething`? 
} 

Je commence à soupçonner ce n'est pas, mais je pensais que je peux aussi bien demander qu'il ferait mon code beaucoup plus court et plus facile à lire.

+1

@stagas: '__parent__' est une extension Mozilla, qui fonctionne en réalité bien seulement sur Rhino, il est un moyen d'exposer l'objet variable * * (l'objet haut de la chaîne de portée d'une fonction), où les variables, les arguments et les déclarations de fonctions sont liés. – CMS

Répondre

3

Eh bien, le plus proche que je peux penser, sans techniquement passer la valeur comme argument , serait de définir la valeur this de la fonction doSomething.

Puisque la fonction doSomething n'est pas lié à un objet, par défaut, si vous l'appelez comme doSomething(); la valeur this à l'intérieur fera référence à l'objet global, et qui est normalement pas trop utile ...

Pour exemple:

var ob = { 
    callme: function() { 
    doSomething.call(this); // bind the `this` value of `doSomething` 
    } 
}; 

function doSomething() { 
    alert(this === ob); // use the bound `this` value 
} 

ob.callme(); 
+0

Il semble en effet qu'il ne soit pas possible de le faire sans le passer d'une manière ou d'une autre. Merci quand même, je vais marquer cela comme accepté si personne ne le résout plus tard aujourd'hui :-) – cryo

Questions connexes