Вы должны использовать new
при вызове конструктора для создания экземпляра id
и не возвращать ничего явно из конструктора, чтобы экземпляр возвращался по умолчанию - тогда вы можете использовать связанный прототипметоды:
var id = function(item) {
this.element = document.getElementById(item);
}
id.prototype.print = function(value) {
this.element.innerHTML = value;
}
document.body.onclick = function() {
const myElm = new id('target');
myElm.print('printed!');
}
#target {
background: #00000055;
padding: 10px;
margin: 30px;
display: inline-block;
cursor: pointer;
}
<body>
<div id="target">some text</div>
</body>
Когда вы выполните
return element;
в конце конструктора, это приведет к тому, что возвращаемый элемент будет простой HTML-элемент , а не экземпляр id
(и только экземпляры id
имеют метод print
).
Если вы не хотитеиспользовать new
при вызове id
, а затем id
сам создать и возвратить экземпляр чего-то, у которого есть метод print
(вызывая new
в id
и возвращая его):
var id = function(item) {
const instance = new MyElmClass(item);
return instance;
}
var MyElmClass = function(item){
this.element = document.getElementById(item);
};
MyElmClass.prototype.print = function(value) {
this.element.innerHTML = value;
}
document.body.onclick = function() {
const myElm = id('target');
myElm.print('printed!');
}
#target {
background: #00000055;
padding: 10px;
margin: 30px;
display: inline-block;
cursor: pointer;
}
<body>
<div id="target">some text</div>
</body>