在javascript中扩展html元素

时间:2012-12-30 10:03:23

标签: javascript html prototype extend

我正在开发一种工具,通过从用户选择的较小部分组装GUI来创建GUI。 这些较小的部分是以编程方式创建的html元素。

有效率我想知道这些元素是否可以共享原型,就像普通的javascript对象一样。

这是我的扩展方法:

var extend = function(o){
    var F = function(){};
    F.prototype = o;
    var x = new F();
    x._proto_ = o;
    return x;
};

与Object.create()相同,它只是像Mozilla一样保留对原型的引用。

所以这适用于普通对象:

var a = { x: 0, y: 1};
var b = extend(a);
b.y; // 1 

但是当我尝试将它用于实际的html元素时,它失败了:

var a = document.createElement("div");
a.whatever = //whatever..
var b = extend(a);
document.body.appendChild(b); //this throws an error.

错误读取:“尝试在不存在的上下文中引用节点。”

这是什么交易?是不是可以用html元素做到这一点?

任何想法都表示赞赏..

1 个答案:

答案 0 :(得分:1)

因为在b调用之后得到的extend不是DOM元素,所以它是一个对象,它保存对原型中DOM元素的引用。

P.S。您确定在x.prototype = o;函数中需要extend行吗?