Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // メソッド割当(スタティック、プロトタイプ、動的)の違い
- var check = function(num, f) {
- try {
- console.log("OK" + num, f());
- } catch (e) {
- console.log("NG" + num, e.message);
- }
- }
- function Class() { console.log("!"); }
- Class.method1 = function() { console.log("method1", this); }
- Class.prototype.method2 = function() { console.log("method2", this); }
- var c = new Class();
- c.method3 = function() { console.log("method3", this); }
- check(1, () => { c.method1(); }); // インスタンスからスタティックメソッドは呼ぶことができない。
- check(2, () => { Class.method1(); }); // スタティックメソッドを呼び出せる。
- check(3, () => { c.method2(); }); // prototypeを通じて定義したものはインスタンスメソッドとして呼び出せる。
- check(4, () => { Class.prototype.method2(); }); // Class.prototypeのメソッドは直接呼び出せる。
- check(5, () => { c.method3(); }); // インスタンス生成後に関数を割り当てて呼び出せる。
- // インスタンスメソッドの場合はc.method2.constructorとしてコンストラクタにアクセスできるので、
- // nameプロパティからクラス名がわかる。動的メソッドはコンストラクタを通して初期化していないので
- // このようなことができない。c.method3.prototype.constructor.nameは""であり、起源が異なる
- // ことがわかる。
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement