我正在开发一种工具,通过从用户选择的较小部分组装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元素做到这一点?任何想法都表示赞赏..
答案 0 :(得分:1)
因为在b
调用之后得到的extend
不是DOM元素,所以它是一个对象,它保存对原型中DOM元素的引用。
P.S。您确定在x.prototype = o;
函数中需要extend
行吗?