2015-04-20 3 views
1
var obj = {x:5, y:new Number(5)}; 

function value(value) { 
    //using == would result in false positives for value.call(obj.y, new Number(5)); 
    return this === value; 
} 

console.log(value.call(obj.x, obj.x)); //False 
console.log(value.call(obj.y, obj.y)); //True 

Javascript (pour des raisons évidentes), enveloppe les primitives dans les objets temporaires lorsqu'elles sont affectées à this. Existe-t-il des moyens de déterminer si l'objet référencé via this est créé par l'utilisateur et permanent par rapport au système créé et transitoire?Détermine si la primitive enveloppée par l'objet a été créée par l'utilisateur

+0

Êtes-vous sûr qu'il est pas Java JavaScript? – MaxZoom

+0

@Max, peut-être que la boxe n'est pas le bon terme dans Javascript - je fais référence aux wrappers Object autour des types primitifs. – danShumway

+0

Pourquoi ne pas les traiter également? – zerkms

Répondre

0

vous pouvez essayer ceci:

function fun() { 
    // in browser, the 'global' is window, and global in node. 
    // but in strict mode, if you don't specify 'this', it will be 'undefined'. 
    if (this === global || this === undefined) { 
     console.log('system created'); 
    } else { 
     console.log('user created'); 
    } 
} 
+0

Je ne suis pas sûr que cela soit applicable. Javascript permet aux primitives d'être passées en contexte de '' 'call()' '' et '' 'apply()' ''. Lorsque cela se produit, '' this''' ne sera jamais global ou indéfini, ce sera une version enveloppée de la primitive passée. – danShumway

+0

@danShumway désolé, je me méprends sur vos mots. Je pense qu'il n'y a aucun moyen de déterminer cela. – yibuyisheng