聞きたいこと
javascriptの基本を勉強しているものです。
些細な疑問なのですが、タイトルの通り isArray メソッドは静的メソッドと捉えても良いのでしょうか。
インスタンスから呼び出せない時点でインスタンスメソッドではないということはわかるのですが、
リファレンスを見ても「静的メソッド」という記述がなかったので、ここで質問させていただきました。
自分のイメージとしては、以下のコードのような感じだと思っているのですがどうでしょうか...。
javascript
1function Array(){ 2 //ほにゃらら 3} 4Array.isArray = function(){ 5 //Arrayかどうか判別する処理 6} 7 8Array.isArray(オブジェクト)
回答のほど、よろしくお願いいたします。
追加
tetsunosukeさんが教えてくださった参考ページの例について自分でコードを動かして
確認していたのですが、以下の点が分かりました。
間違っている部分や足りない部分がありましたらご指摘いただけると幸いです。
[分かった点]
・staticメソッド内でのthisはclass自身を指すため、staticメソッドから他のstaticメソッドへは this.staticメソッド で呼び出せる
・クラス内でクラスを明示的に呼び出すことももちろん出来る(例の場合だとStaticMethodClass.staticメソッドのように)
・インスタンスメソッド内のthisはインスタンスを指すため、staticメソッドにアクセスする場合はconstructorプロパティで生成元を辿って参照しなければならない
よろしくお願いいたします。
javascript
1class StaticMethodCall{ 2 3 4 constructor(){ 5 this.className = "StaticMethodCall Class."; 6 7 console.log(StaticMethodCall.staticMethod()); 8 // 'static method has been called' 9 10 console.log(this.constructor.staticMethod()); //インスタンス生成元をconstructorを辿っている 11 // 'static method has been called' 12 } 13 14 static staticMethod(){ 15 return 'static method has been called.'; 16 } 17 18 isThis(){ 19 //staticメソッドでない場合、thisはインスタンスを指す? 20 return ` 21 this: ${this} 22 this === StaticMethodCall: ${this === StaticMethodCall} false 23 this.className = ${this.className} //StaticMethodCall Class. 24 `; 25 } 26 27 static isThis(){ 28 //staticメソッド内でのthisはクラス自体を指す 29 return ` 30 this: ${this} 31 this === StaticMethodCall: ${this === StaticMethodCall} true 32 this.className = ${this.className} //undefined 33 `; 34 } 35} 36 37let sm = new StaticMethodCall(); 38console.log(sm.isThis()); 39console.log(StaticMethodCall.isThis());