Javascript子类化和createElement

时间:2010-02-20 09:20:33

标签: javascript dom prototype subclass

function 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"); }

这里发生的是我最终得到一个id为“再见”的div。我想要的是具有指定ID的两个div。

我已经能够通过创建一个创建元素的“A”方法来解决这个问题。

如何在不使用该方法的情况下修复它?

1 个答案:

答案 0 :(得分:1)

创建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);