PageSourceSearch

https://j-times.jp/pb5001h/wp-content/themes/hpdigital/js/ClassExtend.js

js j-times.jp collected 2026-10-02 06:22:52 UTC 2,956 bytes, 72 lines download raw bytes

1// ♀
2// JavaScript オブジェクト(クラス)を継承させるための処理
3//
4// [使用方法]
5//    子クラスのコンストラクタ内で、当関数を呼ぶ。
6//
7//    // 親クラスの定義
8//    var OyaClass = function(a, b) {
9//        this.a = ’a';
10//        this.b = 'b';
11//    }
12//    $.extend(OyaClass.prototype, {
13//        method1 : function() {
14//            .....
15//        },
16//        method2 : function() {
17//            .....
18//        }
19//    });
20//
21//    // 子クラスの定義
22//    var KoClass = function(a, b, c) {
23//        // ===== ここで当関数をコール =====
24//        class_extend(this, OyaClass, [a, b]);
25//
26//        // 子クラス独自のメンバ
27//        this.b = 'override b';  // メンバ変数のオーバーライド
28//        this.c = 'c';
29//    }
30//    $.extend(KoClass.prototype, {
31//        method1 : function() {  // メソッドのオーバーライド
32//            .....
33//        },
34//        method3 : function() {
35//            .....
36//        }
37//    });
38//
39// [使用にあたっての注意事項]
40//    1.コンストラクタで、プロトタイプ内のメソッドを呼び出したりしてはいけない
41//    2.コンストラクタで定義するメンバ変数は、当関数をコールした後に定義すること
42//    3.メソッドをオーバーライドした場合、親メソッドをコールすることはできないので注意
43//
44
45/**
46 * JavaScript オブジェクト(クラス)を継承させるための処理
47 *
48 * @param {this}  koClassThis      子クラスのthis
49 * @param {class} oyaClass         親クラス(コンストラクタ)
50 * @param {array} koClassArgs      個クラスのコンストラクタの引数の配列
51 */
52function class_extend(koClassThis, oyaClass, koClassArgs) {
53	var method = '';
54
55	// 子クラスのthisの元となるクラス(子クラスのコンストラクタ)を得る
56	var koClassConstructor = koClassThis.constructor;
57
58	// 親クラスのプロトタイプ内のメソッドを、子クラスのプロトタイプにコピーする
59	for (method in oyaClass.prototype) {
60		// 子クラスのプロトタイプ内に、親クラスと同じ名前のメソッドがない場合に、
61		// 子クラスのプロトタイプにコピーする
62		if (!koClassConstructor.prototype[method]) {
63			koClassConstructor.prototype[method] = oyaClass.prototype[method];
64		}
65	}
66
67	// 親クラスのコンストラクタを apply を使用して呼び出す
68	// これにより、親クラスのコンストラクタのthisが、子クラスのthisとして呼び出される
69	// よって、一端、親クラスのメンバ変数がthisにセットされるが、当関数を抜けた後、子クラスの
70	// コンストラクタ内のメンバ変数がセットするため、最終的には子クラスのメンバ変数が優先される
71	oyaClass.apply(koClassThis, koClassArgs);
72}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.