SHARE
TWEET

Untitled

a guest Mar 24th, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // メソッド割当(スタティック、プロトタイプ、動的)の違い
  2. var check = function(num, f) {
  3.     try {
  4.         console.log("OK" + num, f());
  5.     } catch (e) {
  6.         console.log("NG" + num, e.message);
  7.     }
  8. }
  9.  
  10. function Class() { console.log("!"); }
  11. Class.method1 = function() { console.log("method1", this); }
  12. Class.prototype.method2 = function() { console.log("method2", this); }
  13. var c = new Class();
  14. c.method3 = function() { console.log("method3", this); }
  15.  
  16. check(1, () => { c.method1(); });                   // インスタンスからスタティックメソッドは呼ぶことができない。
  17. check(2, () => { Class.method1(); });               // スタティックメソッドを呼び出せる。
  18. check(3, () => { c.method2(); });                   // prototypeを通じて定義したものはインスタンスメソッドとして呼び出せる。
  19. check(4, () => { Class.prototype.method2(); });     // Class.prototypeのメソッドは直接呼び出せる。
  20. check(5, () => { c.method3(); });                   // インスタンス生成後に関数を割り当てて呼び出せる。
  21.  
  22. // インスタンスメソッドの場合はc.method2.constructorとしてコンストラクタにアクセスできるので、
  23. // nameプロパティからクラス名がわかる。動的メソッドはコンストラクタを通して初期化していないので
  24. // このようなことができない。c.method3.prototype.constructor.nameは""であり、起源が異なる
  25. // ことがわかる。
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top