If you were going to augment a built-in prototype to do this, it would make more sense to augment Element.prototype, not String.prototype, since what you’re trying to use hide on isn’t a string, it’s an HTMLElement instance (which inherits from Element).
But it’s usually not a good idea to augment/extend the built-in prototypes. It’s fragile. If two scripts in the same page do it using the same name, they interfere with each other. If the DOM later gets a hide method, that messes up your existing code. Etc. Better to have a function you pass the element into:
function hide(element) {
element.style.display = "none";
}
setTimeout(() => {
hide(document.getElementById("id"));
}, 800);
<h1 id="id">Hi there</h1>
But if you do do it, make the extension non-enumerable by using defineProperty:
Object.defineProperty(Element.prototype, "hide", {
value() {
this.style.display = "none";
},
writable: true,
configurable: true,
enumerable: false, // This is the default, but I'm including it for emphasis...
});
setTimeout(() => {
document.getElementById("id").hide();
}, 800);
<h1 id="id">Hi there</h1>
If you really, really wanted to, you could do this on String.prototype by assuming the string is the id of an element (or a selector for an element). For instance:
Object.defineProperty(String.prototype, "hide", {
value() {
const element = document.getElementById(this);
if (element) {
element.style.display = "none";
}
},
writable: true,
configurable: true,
enumerable: false, // This is the default, but I'm including it for emphasis...
});
setTimeout(() => {
"id".hide();
}, 800);
<h1 id="id">Hi there</h1>
But I wouldn’t do that. 🙂
solved How to use “String.prototype” in javascript