Created
May 27, 2020 17:38
-
-
Save gaearon/a25fd42a1e6b4cc24851978df0a36571 to your computer and use it in GitHub Desktop.
Beneath Classes: Prototypes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Spiderman { | |
lookOut() { | |
alert('My Spider-Sense is tingling.'); | |
} | |
} | |
let miles = new Spiderman(); | |
miles.lookOut(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// class Spiderman { | |
let SpidermanPrototype = { | |
lookOut() { | |
alert('My Spider-Sense is tingling.'); | |
} | |
}; | |
// let miles = new Spiderman(); | |
let miles = { __proto__: SpidermanPrototype }; | |
miles.lookOut(); |
Hi @gaearon,
I am wondering why, when defining classes, the properties are on the object itself while the methods are on the __proto__
class Spiderman {
aProperty;
lookOut() {
alert("My Spider-Sense is tingling.");
}
}
let miles = new Spiderman();
console.log(miles.hasOwnProperty("aProperty")); // true
console.log(Object.getPrototypeOf(miles).hasOwnProperty("lookOut")); // true
This is picked up from the Typescript playground. I just finished the Just Javascript module written by Dan and I have a question which might be a noob one but isn't
Spiderman.prototype.lookOut = (..)
regarded as polluting the prototype and should be discouraged?
const someObject = {};
const everyObjectProto = someObject.__proto__;
const someFunction = function() {};
someFunction.prototype.__proto__ === everyObjectProto; // true
So "someFunction.prototype" points to an object, just like any other in your code, not to the "main" object prototype. Thus it is not polluting anything.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ovistoica I think it is not exactly polluting, because It isn't changing a default prototype like Array, String or Object ones.