Подклассы Javascript и createElement - PullRequest
       18

Подклассы Javascript и createElement

2 голосов
/ 20 февраля 2010

функция A () { this.myProp = document.createElement ("div"); }

function B(id) {
    this.myProp.id = id;
    document.body.appendChild(this.myProp); }

B.prototype = new A();

window.onload = function() {
    new B("hello");
    new B("goodbye"); }

Что здесь происходит, так это то, что я получаю один div с идентификатором "до свидания". То, что я хотел бы, это два div с указанными идентификаторами.

Мне удалось решить эту проблему, создав метод «А», который создает элемент.

Как я могу это исправить, не используя метод?

1 Ответ

1 голос
/ 20 февраля 2010

Вы должны вызвать конструктор A() при создании new B():

function A() {
    this.myProp = document.createElement("div");
}

function B(id) {
    A.call(this); // !!!
    this.myProp.id = id;
    document.body.appendChild(this.myProp);
}

Если вы хотите, чтобы B экземпляры наследовали от A.prototype, не устанавливайте B.prototype для экземпляра A, а используйте Object.create() - или пользовательскую реализацию для старых браузеров - чтобы избежать вызова конструктора :

var clone = Object.create || (function() {
    function Dummy() {}
    return function(obj) {
        Dummy.prototype = obj;
        return new Dummy;
    };
})();

B.prototype = clone(A.prototype);
...