我可以继承DOM类吗?

Tim*_*Tim 7 javascript prototype

我想知道我是否可以创建HTMLDivElement的子类.像这样.

MyDivElement.prototype.pickColor = function()
{
    return this.picked;
}
function MyDivElement()
{
    this = new HTMLDivElement();
    this.picked = 'unknowd';
}
alert(this.picked); // print: 'unkowd'
Run Code Online (Sandbox Code Playgroud)

是(类似的)这可能吗?如果没有,实现这一目标的最佳方法是什么?

Jak*_*ake 6

在__proto__暴露和可变的浏览器中,您可以使用子类DOM元素.它看起来像这样:

function CustomEl () {
    var el = document.createElement('div')
    el.__proto__ = CustomEl.prototype
    return el
}
CustomEl.prototype.__proto__ = HTMLDivElement.prototype
Run Code Online (Sandbox Code Playgroud)

我还在jsFiddle上更详细地使用它.不幸的是,虽然IE和Opera不允许__proto__访问,但据我所知,将来也没有计划.


Šim*_*das 2

new HTMLDivElement();在 Chrome 中抛出 TypError "Illegal constructor"- 所以这是不可能的。

更新:我已经在其他当前浏览器中进行了测试,它们会抛出各种类型的错误 - 但它们都会抛出。


实际上,这会起作用:

function MyDivElement() {
    this.picked = 'unknowd';
}

MyDivElement.prototype = document.createElement('div');

var mydiv = new MyDivElement();
Run Code Online (Sandbox Code Playgroud)

但我不确定你如何使用这个模式......