0

我正在开发一种工具,该工具通过从用户选择的较小部分组装它来创建 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元素不可能做到这一点吗?

任何想法表示赞赏..

4

1 回答 1

1

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

PS你确定你需要x.prototype = o;line inextend函数吗?

于 2012-12-30T10:45:11.780 回答