質問文のコードはES5という古い実装の方法ですね。
基本的にオーバーライド!という機能はありませんので、
それで良いです。
プロトタイプベースなんて独特だし、
他の言語からの乗り換え組としてはややこしくて仕方ありません。
要望が多かったのか、
ES2015という比較的新しいバージョンにてクラス構文が実装されました。
こちらにもオーバーライドの機能はありませんが、
継承先で同じメソッド名を定義するだけでオーバーライドになります。
ついでにsuper
というキーワードで親のクラスにアクセスできます。
なので親のメソッドも実行しておきたいケースも余裕です。
下記の記事が良い感じでまとまっていました。
参考記事: (初心者向け) JavaScript のクラス (ES6 対応) - Qiita
メソッドのオーバーライド
メソッドのオーバーライドは特にキーワードなどなしで使えます。次のサンプルでは2重に継承を行い、メソッド distance() をオーバーライドしています。
コードは長いのでメソッドのオーバーライドのセクションを見てください。
クラス構文は既にブラウザの対応も整備され、IE11のサポートが切れるのを待つだけの状態になっています。
これを機に、クラス構文への乗り換えをおすすめします。
ES2015以降のコードをES5相当に変換するBabelというツールもありますのでIE11対応は考えなくても問題ありません
最後に先程のクラス構文のコードをBabelで変換させたものを記載します。
全部追加の関数の中に隠蔽されちゃっててよく分かりませんね。
js
1// 【省略】上の方に変換用のコードが大量に生成される
2
3// 基本クラス Point を class 宣言
4var Point = function Point() {
5 var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
6 var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
7
8 _classCallCheck(this, Point);
9
10 this.x = x;
11 this.y = y;
12}; // 派生クラス PointEx をクラス式で作成
13
14var PointEx = /*#__PURE__*/function (_Point) {
15 _inherits(PointEx, _Point);
16
17 var _super = _createSuper(PointEx);
18
19 function PointEx(x, y) {
20 _classCallCheck(this, PointEx);
21
22 return _super.call(this, x, y);
23 } // 原点からの距離を返す。
24
25
26 _createClass(PointEx, [{
27 key: "distance",
28 value: function distance() {
29 return Math.sqrt(this.x * this.x + this.y * this.y);
30 }
31 }]);
32
33 return PointEx;
34}(Point); // NaN を判別できるように改良したクラス
35
36
37var PointExEx = /*#__PURE__*/function (_PointEx) {
38 _inherits(PointExEx, _PointEx);
39
40 var _super2 = _createSuper(PointExEx);
41
42 function PointExEx(x, y) {
43 var _this;
44
45 _classCallCheck(this, PointExEx);
46
47 _this = _super2.call(this, x, y);
48 _this.valid = !(x === NaN || y === NaN);
49 return _this;
50 } // オーバーライドしたメソッド
51
52
53 _createClass(PointExEx, [{
54 key: "distance",
55 value: function distance() {
56 if (this.valid) {
57 // NaN でない場合は、基底クラスの distance() を呼び出す。
58 return _get(_getPrototypeOf(PointExEx.prototype), "distance", this).call(this);
59 } else {
60 return null;
61 }
62 }
63 }]);
64
65 return PointExEx;
66}(PointEx);
67
68var p = new PointExEx(2, 4);
69console.log("(%d, %d)", p.x, p.y);
70console.log("valid = %s", p.valid.toString());
71console.log("distance = %d", p.distance());
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。