Javascript将函数声明为函数的dict转换为原型

时间:2012-06-12 17:23:38

标签: javascript function prototype

我想做的是:

我的基本代码:

var Obj = function() {
    this.do = function() {};
    this.stop = function() {};
    this.kill = function() {};
};

Obj.prototype.load = function() {};

所需的转换:

var ConvObject = function() { };
ConvObject.prototype = (typeof Obj == "function")? new Obj : Obj;

此示例有效(对于转换部分)。在ConvObject中,Obj的所有方法都在那里。但就我而言,我不想执行Obj的默认构造函数。我宁愿避免这种情况。实际上,我不想执行新的Obj。

我尝试了不同的方法来实现这一目标。这是我现在能找到的最佳答案:

var getSizeOf = function(obj) {
  var size = 0, key;
  for (key in obj) {
    if (obj.hasOwnProperty(key)) size++;
  }
  return size;
};

var ConvObject = function() { };
if ((typeof Obj == "function") && getSizeOf(Obj.prototype) == 0) {
  ConvObject.prototype = new Obj;
}
else {
  ConvObject.prototype = (typeof Obj == "function")? Obj.prototype : Obj;
}

当Obj看起来像这样:

var Obj = new function() {};
Obj.prototype.do = function() {};
Obj.prototype.stop = function() {};
Obj.prototype.kill = function() {};
Obj.prototype.load = function() {};

或者看起来像这样:

var Obj = function() {
    this.do = function() {};
    this.stop = function() {};
    this.kill = function() {};
    this.load = function() {};
};

但是,当我有上面的基本代码时,此解决方案失败了。如何避免对默认构造函数的调用? 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

使用Object.create()(或其polyfill)直接从Obj.prototype继承。

To"继承" Obj构造函数中的实例方法,您应该在每个ConvObjectVery simple Javascript inheritance上调用它。无论如何,当这些方法是特定于实例的时候,你需要这样做,否则它们应该在原型上。