Javascript 寄生遗传与超级方法
道格拉斯·克罗克福德定义了他的寄生遗传 我想使用这种继承模式,因为它简单明了,但我想调用超级方法,而不定义Crockford调用的Javascript 寄生遗传与超级方法,javascript,inheritance,Javascript,Inheritance,道格拉斯·克罗克福德定义了他的寄生遗传 我想使用这种继承模式,因为它简单明了,但我想调用超级方法,而不定义Crockford调用的uber函数,因为我不想修改对象的原型。我该怎么办 我想有一些不错的语法,而不修改对象。。。这可能吗?在他的例子中,这是: function ZParenizor2(value) { var that = new Parenizor(value); that.toString = function () { if (this.getVa
uber
函数,因为我不想修改对象的原型。我该怎么办
我想有一些不错的语法,而不修改对象。。。这可能吗?在他的例子中,这是:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-"
};
return that;
}
将变成这样:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return Parenizor.prototype.toString.apply(this, arguments);
}
return "-0-"
};
return that;
}
--编辑--
另一方面,您也可以简单地定义一个名为BaseObject的新类,定义其上的所有基本扩展方法(例如“uber”),然后在此基础上建立对象层次结构。在他的示例中,这是:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return this.uber('toString');
}
return "-0-"
};
return that;
}
将变成这样:
function ZParenizor2(value) {
var that = new Parenizor(value);
that.toString = function () {
if (this.getValue()) {
return Parenizor.prototype.toString.apply(this, arguments);
}
return "-0-"
};
return that;
}
--编辑--
另一方面,您也可以简单地定义一个名为BaseObject的新类,在其上定义所有基本的扩展方法(例如“uber”),然后在此基础上建立对象层次结构。我不知道是谁投票否决了您,但不评论问题的错误就投票否决是不酷的。所以我反对你。你不需要修改Oject的原型。您应该能够创建一个
inherit
函数来添加uber
/\u super
,而不用担心内置原型。这应该不会太难。这会给什么增加uber/_super,对不起?@cdarwin-。。。将uber添加到你的构造函数原型中。我不知道是谁否决了你,但不评论问题的错误就否决你是不酷的。所以我反对你。你不需要修改Oject的原型。您应该能够创建一个inherit
函数来添加uber
/\u super
,而不用担心内置原型。这应该不会太难。这会给什么增加uber/_super,对不起?@cdarwin-。。。将uber添加到构造函数的原型中。我更新了我的问题:我希望在不修改对象原型的情况下拥有一个漂亮的sintax。我要求太多了吗?@cdarwin:我要求太多了吗?
也许没有。但你肯定问错了。用Crockford的话说(就在你链接的页面上):我写JavaScript已经8年了,我从来没有发现需要使用uber函数。超级概念在经典模式中相当重要,但在原型模式和功能模式中似乎没有必要。现在,我认为我早期尝试在JavaScript中支持经典模型是一个错误。
我更新了我的问题:我希望在不修改对象原型的情况下拥有一个好的sintax。我要求太多了吗?@cdarwin:我要求太多了吗?
也许没有。但你肯定问错了。用Crockford的话说(就在你链接的页面上):我写JavaScript已经8年了,我从来没有发现需要使用uber函数。超级概念在经典模式中相当重要,但在原型模式和功能模式中似乎没有必要。现在,我认为我早期尝试在JavaScript中支持经典模型是一个错误。