继承javascript中的DOM Element对象!这段代码有什么问题?

Rom*_*ron 3 javascript dom element prototypal-inheritance

我试图从DOM Element对象继承,所有代码在我创建对象时运行正常,但是当我尝试调用appendChild()方法时,它给出了一个错误说:

MyObject doesn't have an appendChild method
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var content=document.createTextNode("This was dynamically created");
function MyObject(tagName){
    Element.constructor.call(this,tagName);
    this.prototype=Element.prototype;
    this.prototype=Object.defineProperties(this.prototype,{
       newMethod:function(){
       //dosomething

       }
    });
}
var newObj=new MyObject("div");
newObj.appendChild(content);
Run Code Online (Sandbox Code Playgroud)

小智 5

虽然你做错了(稍后会详细介绍),但你最终还是试图传递一个继承自DOM Element而不是DOM Element本身的对象.这是不允许的.

它似乎应该工作,但DOM元素和DOM方法是主机对象.它们不会按照您对本机对象所期望的所有规则进行播放.该.appendChild()方法需要一个元素,而不是其他任何东西.所以你要做的事情是行不通的.


关于你的继承方法,这是完全错误的.您不修改.prototype正在创建的新对象的属性.您修改.prototype构造函数的.它只完成一次,然后从构造函数创建的所有新对象都从分配给该构造函数.prototype属性的对象继承.

因为没有继承方式,所以没有.appendChild()方法.下面的代码修复了它,但由于上面给出的原因,它仍然无法正常工作.

function MyObject(tagName){
    Element.call(this, tagName);
}

MyObject.prototype=Object.create(Element.prototype);

Object.defineProperties(MyObject.prototype,{
   newMethod: {
       value:function(){
           //dosomething
       }
   }
});
Run Code Online (Sandbox Code Playgroud)

您的属性描述符语法也是错误的,所以我修复了它.