Une expression de fonction Javascript utilisant un « nouveau » mot-clé est-elle vraiment statique ?
Dans le but de créer une classe de type statique en Javascript sans à l'aide d'un constructeur ou d'une instanciation, le code a été écrit comme tel :
var gameData = new function () { //May need this later this.init = function () { }; this.storageAvailable = function () { if (typeof (Storage) !== "undefined") { return true; } else { return false; } }; }
L'hypothèse est que le mot-clé 'new' empêche l'instanciation et fait en sorte que l'expression de fonction se comporte comme une classe statique. Cependant, ce n'est pas tout à fait exact.
Comprendre le concept « statique » en Javascript
En Javascript, une propriété ou une méthode statique n'est pas liée à une instance d'un classe. Il appartient à la classe elle-même, qu'une instance existe ou non. Les membres statiques sont généralement partagés par toutes les instances d'une classe.
Limitations de l'approche de l'expression de fonction
Malgré le mot-clé 'new', l'expression de fonction a toujours un constructeur propriété. Cela signifie qu'il peut être rétabli à l'aide du code suivant :
var gameData2 = new (gameData.constructor)();
Cela crée une instance distincte de l'expression de fonction, annulant ainsi le comportement statique prévu. De plus, la chaîne de prototypes contient un objet prototype inutile pour l'expression de fonction.
Alternatives à l'implémentation « statique » en Javascript
Pour obtenir un véritable comportement statique, envisagez ces alternatives :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!