gpt4 book ai didi

javascript - 使用 John Resig 的 "simple JavaScript inheritance"如何调用 super 方法以及方法中的额外代码?

转载 作者:行者123 更新时间:2023-11-30 09:01:15 25 4
gpt4 key购买 nike

我决定尝试 JavaScript 天才 John Resig 的“简单 JavaScript 继承”,详见此博客页面:

http://ejohn.org/blog/simple-javascript-inheritance/

我很好奇如何使用调用 super 方法的代码覆盖方法。换句话说,假设我从一个 Person 类开始:

var Person = Class.extend({
init: function ( name, age ) {
this.name = name;
this.age = age;
}
});

我扩展了 Person 类以创建一个新类 Worker:

var Worker = Person.extend({
init: function ( name, age, occupation ) {
this.name = name;
this.age = age;
this.occupation = occupation;
}
});

init 方法的两个版本中存在代码重复。无论我使用哪个类,都会执行以下两行:

this.name = name;
this.age = age;

看来我应该能够从 Hero 类的 init 中调用 Person 类的 init 方法> 方法,然后使用 occupation 属性插入额外的代码行。

不过,我不能用 Resig 先生的代码来做到这一点。以下不起作用:

var Worker = Person.extend({
init: function ( name, age, occupation ) {
this._super(arguments);
this.occupation = occupation;
}
});

一旦从 Person 调用以创建 Worker 类的 extend 方法看到 *this._super(arguments)* 它就会替换Worker 的 initPerson 的 init 给我留下了一个未定义的 occupation 属性。

对于如何在不修改 Resig 先生的代码的情况下解决这个问题,有没有人有任何建议?我目前正在尝试不同的方法来实现“ super ”的概念,但我无法让它与现有代码一起工作这一事实一直困扰着我。 :-)

更新:我意识到我在实现 Resig 先生的代码时犯了一个小错误,这就是为什么它会按照我描述的方式运行。 @chuckj 也正确地指出了 Worker 的 init 中的一个错误。

最佳答案

将 Worker 定义更改为,

var Worker = Person.extend({ 
init: function (name, age, occupation) {
this._super(name, age);
this.occupation = occupation;
}
});

您不传递arguments 数组,而是使用它期望的参数调用_super

关于javascript - 使用 John Resig 的 "simple JavaScript inheritance"如何调用 super 方法以及方法中的额外代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9145056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com