как добавить id в конструктор

336
02 февраля 2017, 03:14

как можно добавить id в конструктор? html:

<div id="elem"></div>

js:

function ready() {
    function Rectangle(i, w, h, c) {
        this.id = i;
        this.width = w;
        this.height = h;
        this.color = c;
    }
    Rectangle.prototype.elemId = function() {
        return this.id = document.getElementById();
    }
    Rectangle.prototype.doublewidth = function() {
        return this.width * 2;
    }
    Rectangle.prototype.doubleheight = function() {
        return this.height * 2;
    }
    var oneRect = new Rectangle("elem", 300, 150, "green");
    oneRect.elemId().style.background = oneRect.color;
    oneRect.elemId().style.width = oneRect.doublewidth() + "px";
    oneRect.elemId().style.height = oneRect.doubleheight() + "px";
};
document.addEventListener("DOMContentLoaded", ready);
Answer 1

Судя по всему, вы пытаетесь вернуть элемент по id в методе elemId:

Rectangle.prototype.elemId = function() {
    return document.getElementById(this.id);
}
Answer 2

В том же конструкторе можете создать поле, где будет храниться ссылка на html-объект, потому что каждый раз вызывать getElementById не очень правильно

function ready() {
    function Rectangle(i, w, h, c) {
        this.id = i;
        this.width = w;
        this.height = h;
        this.color = c;
        //  ссылка на html объект
        this.elem = document.getElementById(i);
    }
    Rectangle.prototype.doublewidth = function() {
        return this.width * 2;
    }
    Rectangle.prototype.doubleheight = function() {
        return this.height * 2;
    }
    var oneRect = new Rectangle("elem", 300, 150, "green");
    oneRect.elem.style.background = oneRect.color;
    oneRect.elem.style.width = oneRect.doublewidth() + "px";
    oneRect.elem.style.height = oneRect.doubleheight() + "px";
};
document.addEventListener("DOMContentLoaded", ready);
Answer 3

Пример реализации через сеттеры(описал только ширину для простоты):

function Rectangle(id, w, h, color) { 
  var el = document.getElementById(id); 
  el.style.width = w + 'px'; 
  el.style.height = h + 'px'; 
  el.style.backgroundColor = color; 
   
  return { 
    set width(width) { 
      w = width; 
      el.style.width = w + 'px'; 
    }, 
    get width() {return w;} 
  }; 
} 
 
var r = new Rectangle('rect', 25, 50, 'red'); 
setTimeout(() => r.width*=2, 500);
<div id="rect"></div>

READ ALSO
Обработка исключения в JSON

Обработка исключения в JSON

Я получаю с сервера ответы, например

399
Нагрузка на сервер и JS фреймворки

Нагрузка на сервер и JS фреймворки

При использовании Angular*,Vuejs и так далее, на стороне сервера нужно только выплюнуть данные, а клиентская часть сформирует страницу

302
Контекст внутри $().click(function(){})?

Контекст внутри $().click(function(){})?

Что я делаю не так? Всё же работало всегда, this внутриon(function(){}) всегда возвращал domHtmlElement? Нет?

391
Сортировка JS объекта

Сортировка JS объекта

Доброго времени суток, мои познания в JS весьма скромны, и я уже бьюсь несколько дней над вроде простой задачейЕсть объект:

358