Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.50 KB | None | 0 0
  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. // ことがわかる。
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement