2 votes

JavaScript est un objet ou une fonction

J'ai ce code :

var obj = function (i) {
   this.a = i;
   this.init = function () {
       var _this = this;
       setTimeout(function () {
           alert(_this.a + ' :: ' + typeof _this);
       }, 0);
   };
   this.init();
};

obj('1');
obj('2');
obj('3');
new obj('4');

http://jsfiddle.net/kbWJd/

Le script signale trois fois '3 : : objet' et une fois '4 : : objet'.

Je sais pourquoi. C'est parce que new obj('4') crée une nouvelle instance avec son propre espace mémoire et les appels précédents partagent leur espace mémoire. Lorsque dans le code de obj comment puis-je déterminer si je suis un nouvel objet ou une fonction, puisque typeof _this dit juste "objet" ?

Merci.

2voto

Bryan Downing Points 6758

C'est ce que tu cherches ? Si vous exécutez une fonction sans le new mot-clé this à l'intérieur de la fonction égale l'objet contenant ( window dans ce cas).

if( this === window ){
    console.log('not an object instance');
} else {
    console.log('object instance');
}

Exemple avec un objet contenant différent :

var obj = {

    method: function(){

        if( this === obj ){
            alert('function was not used to create an object instance');
        } else {
            alert('function was used to create an object instance');
        }

    }

};

obj.method(); // this === obj

new obj.method(); // this === newly created object instance

2voto

Niko Points 16715

Le site instanceof peut être utilisé pour une autre solution :

var foo = function() {
    if (this instanceof foo) {
        // new operator has been used (most likely)
    } else {
        // ...
    }
};

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X