如何正确委派对象?

时间:2013-12-03 19:11:50

标签: javascript oop

我想创建自己的DOM对象类型:

var Obj = function(id) {
  this.id = id;
  this.constructor.prototype = document.getElementById(id);
};

var x = new Obj("a_div"); //Success
alert(x.type); //Successfully alert "div"
x.innerHTML = "TEST"; //This does not update the actual div html on the page!!!

我希望对此对象的任何函数调用都将转发到实际的DOM对象。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:0)

为什么不做这样的事情:

var Obj = function(id) {
  return document.getElementById(id);
};

你基本上将getElementById别名化为Obj以获得简写符号。当然,你的x.type不能像预期的那样工作,但我确信可以修复。

您可以在此处查看示例:http://jsfiddle.net/Nemesis02/HwxDL/

更新

var Obj = function(id) {
  var el = document.getElementById(id);
  el.type = function() {
        // do something here
  }
  return el;
};

答案 1 :(得分:0)

我在代码方面取得了部分成功

var Obj = function(id) {
  this.id = id;
  this.__proto__ =  document.getElementById(id);
};

但是当尝试在Firefox中读取/写入innerHTML时,它显示错误:
TypeError: 'innerHTML' getter called on an object that does not implement interface Element.  所以我猜浏览器DOM实现存在一些限制。