TypeError: ce.le prototype est pas défini lors de l'appel de la Fonction.le prototype.méthode()
Je suis en train de lire le livre "Javascript: Les bonnes parties".
Maintenant, je suis à la lecture du chapitre sur l'Augmentant Types:
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};
Mise à JOUR:
Pourquoi le code suivant ne fonctionne pas?
js> Function.prototype.method("test", function(){print("TEST")});
typein:2: TypeError: this.prototype is undefined
Mais code suivant fonctionne sans problèmes:
js> Function.method("test", function(){print("TEST")});
function Function() {[native code]}
Pourquoi ce code fonctionne?
js> var obj = {"status" : "ST"};
js> typeof obj;
"object"
js> obj.method = function(){print(this.status)};
(function () {print(this.status);})
js> obj.method();
ST
"obj" est l'objet.
Mais je peux appeler la méthode "méthode".
Quelle est la différence entre la Fonction.le prototype.méthode et obj.méthode?
OriginalL'auteur Volodymyr Bezuglyy | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
this
se réfère àFunction.prototype
parce que vous avez appelé.method
. Donc, vous êtes à l'aide deFunction.prototype.prototype
qui n'existe pas.Utiliser
Function.method(...)
outhis[name] = ...
pour éliminer l'un des.prototype
s.OriginalL'auteur pimvdb
Parce que:
Function.prototype
est un Objet, et de ne pas hériter de quelque chose à partir de la Fonction constructeur.Function
est un constructeur, mais aussi d'une fonction, de sorte qu'il hérite des méthodes deFunction.prototype
.Function.method
, vous êtes à l'appel de lamethod
méthode d'une instance deFunction
. Donc,this
points à la création de l'instance deFunction
.Function.prototype.method
, vous êtes en invoquant une méthode ordinaire d'un objet.this
points deFunction.prototype
.Pour clarifier, voici un exemple:
"Lors de l'appel de
Function.prototype.method
, vous êtes en invoquant une fonction ordinaire.this
points indéfini (en mode strict) ouwindow
." - ce n'est pas correct. Il pointe vers l'objet que vous êtes d'appel; dans ce cas,Function.prototype
.Alors, quelle est la différence entre la Fonction de l'objet.prototype et de l'objet obj de ma question?
Merci pour l'avis.
Lors de l'appel de
Function.prototype.method()
, il pointe vers un objet, qui n'ont pas deprototype
de la propriété. Tapez ceci dans votre REPL:({}).prototype
. La valeur de retour seraundefined
.OriginalL'auteur Rob W
prototype est utilisé uniquement lorsque vous déclarez la fonction, mais pas quand vous êtes en l'appelant. Prototype rend la fonction d'un membre de l'objet qui sera créé à chaque occurrence de l'objet.
OriginalL'auteur Kory Hodgson