「This (プログラミング)」の版間の差分

削除された内容 追加された内容
m →‎JavaScript: 文章の重複を修正(連投すみません)
Insanity (会話 | 投稿記録)
→‎JavaScript: thisが「現在のinstance」を指すということは、class-basedでもprototype-basedでも同じこと
58行目:
 
=== JavaScript ===
[[プロトタイプベース]]オブジェクト指向言語である[[JavaScript]]では、関数はオブジェクトに属している(メソッドである)ことも、属さないでいる(ただの関数である)こともできる。<!-- 「属す」というのはそのオブジェクト・インスタンスのpropertyの指す値となっているという意味 -->したがって、<code>this</code>が何を指しているかは、関数の呼び出し方によって異なっている。
[[JavaScript]]は[[プロトタイプベース]]の言語であり、クラスという構造がないため、<code>this</code>の意味合いも異なっている。[[new演算子|new]]を付けて関数を[[コンストラクタ]]として呼び出した場合、<code>this</code>は新しく生成されるオブジェクトを指す<ref name="atit_4_1">{{cite web | url=http://www.atmarkit.co.jp/fdotnet/ajaxjs/ajaxjs04/ajaxjs04_01.html | title=連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page1 | publisher=[[@IT]] | date=2007年9月25日 | accessdate=December 13, 2011 | author=山田祥寛}}</ref>。それ以外の関数では、<code>this</code>が何を指すかは呼び出し方に依存するが、JavaScriptでは関数も[[第一級オブジェクト]]であり、そのメソッドを使って<code>this</code>に何を渡すかを指定することができる<ref>{{cite web | url=http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0016 | title=これでできる! クロスブラウザJavaScript入門 第16回 JavaScriptのthisとcall | publisher=[[技術評論社]] | date=2010年10月12日 | accessdate=December 16, 2011 | author=太田昌吾}}</ref>。
 
多くの場面では、クラスベースオブジェクト指向言語のthisと同じように使うことができる。たとえば、<source lang='javascript'>object.notify = function () { alert (this); };
object.notify();</source>のように関数(object.notify<!-- これはobjectのクラスのプロトタイプのメソッド A.prototype.notify (where object instanceof A) の場合も同様 -->)をメソッドとして呼び出した場合、<code>this</code>は<code>object</code>を指す。また、<source lang='javascript'>Counter = function () { this.counter_value = 0; };
[[JavaScript]]は[[プロトタイプベース]]の言語であり、クラスという構造がないため、<code>thisc = new Counter();</codesource>の意味合いも異なっている。ように[[new演算子|new]]を付けて関数(Counter)を[[コンストラクタ]]として呼び出した場合、<code>this</code>は新しく生成されるオブジェクトを指す<ref name="atit_4_1">{{cite web | url=http://www.atmarkit.co.jp/fdotnet/ajaxjs/ajaxjs04/ajaxjs04_01.html | title=連載:Ajax時代のJavaScriptプログラミング再入門 第4回 JavaScriptでオブジェクト指向プログラミング Page1 | publisher=[[@IT]] | date=2007年9月25日 | accessdate=December 13, 2011 | author=山田祥寛}}</ref>。それ以外の関数では、<code>this</code>が何を指すかは呼び出し方に依存するが、JavaScriptでは関数も[[第一級オブジェクト]]であり、そのメソッドを使って<code>this</code>に何を渡すかを指定することができる<ref>{{cite web | url=http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0016 | title=これでできる! クロスブラウザJavaScript入門 第16回 JavaScriptのthisとcall | publisher=[[技術評論社]] | date=2010年10月12日 | accessdate=December 16, 2011 | author=太田昌吾}}</ref>。
 
関数を単独で呼び出す場合は、<code>this</code>は<code>null</code>であるが、<code>this</code>が何を指すかを個別に指定して呼び出すこともできる。(Function.apply) <ref>{{cite web | url=http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0016 | title=これでできる! クロスブラウザJavaScript入門 第16回 JavaScriptのthisとcall | publisher=[[技術評論社]] | date=2010年10月12日 | accessdate=December 16, 2011 | author=太田昌吾}}</ref>。
 
== 脚注 ==