【问题标题】:Trivial Inheritance with JavaScriptJavaScript 的简单继承
【发布时间】:2011-10-08 15:48:05
【问题描述】:
function StringStream() {}
StringStream.prototype = new Array();
StringStream.prototype.toString = function(){ return this.join(''); };

调用new StringStream(1,2,3) 会得到一个空数组

x = new StringStream(1,2,3)

给予

StringStream[0]
__proto__: Array[0]

有人可以解释为什么不调用超类的 (Array) 构造函数吗?

【问题讨论】:

  • 谁给了你这个代码,为什么? :(

标签: javascript inheritance constructor superclass


【解决方案1】:

仅仅因为StringStream.prototype 是一个数组,StringStream 构造函数也不会被Array 替换。

您应该自己实现它:http://jsfiddle.net/gBrtf/

function StringStream() {
    // push arguments as elements to this instance
    Array.prototype.push.apply(this, arguments);
}

StringStream.prototype = new Array;

StringStream.prototype.toString = function(){
    return this.join('');
};

【讨论】:

  • 那么有没有办法调用Array obj的构造函数并传递参数而不是调用push方法呢?
  • @Markos Evlogimenos:你不能将new.apply 结合起来,所以我想没有办法。无论如何,您为什么要尝试创建一个等效于Array 的构造函数?
猜你喜欢
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2012-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多