【发布时间】:2011-08-30 22:12:21
【问题描述】:
我正在为 Javascript 经典继承 1 苦苦挣扎。虽然最终 Douglas Crockford 拒绝了它在 Javascript 中支持经典模型的第一次尝试,但我觉得理解起来很有趣:
我写 JavaScript 已经 8 年了,我从来没有发现需要使用 uber 函数。超级想法在经典模式中相当重要,但在原型和功能模式中似乎是不必要的。我现在认为我早期在 JavaScript 中支持经典模型的尝试是错误的。
但是,寄生继承的问题还不是很清楚:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-"
};
return that;
}
ZParenizor,据我所知是根据 Parenizor 定义的。但是 Parenizor 是基类,它继承自任何人。所以this.uber函数不会被定义,事实上当我调用一个新的ZParenizor2对象的toString方法时会出错。
我是正确的,还是我忽略了什么?
更新
我是正确的。此方法仅在您使用 0 作为参数创建 ZParenizor 时有效,因为它不需要调用 uber 方法(如您在方法实现中所见)。
当您尝试使用不同的参数时,我收到此错误:
Uncaught TypeError: Object #<error> has no method 'uber'
【问题讨论】:
-
所有对象都至少继承自
Object.prototype... -
嗯,错误说明了什么?
-
是的。这个错误不是因为我的想法,而是一个错字。但是,我没有考虑过所有对象都继承自作为对象的 Functions 的事实。谢谢!
-
@SimeVidas
(Object.create(null)).toString() === TypeError对象不需要有原型。但是没有一个是愚蠢的。 -
天哪,我很高兴有人也注意到了这种奇怪现象。我以为我中风了!还有一个
swiss()方法,它也没有定义。所有这些方法都在后面的“糖”部分定义。