JavaScriptの関数はオブジェクトであると参考書でみました。
javascript
1//JavaScript Document 2① 3function obj() { 4 var hoge = 1; 5 return this.a; 6} 7 8window.a = 1; 9document.write(obj(a)); 10=========================== 11② 12var obj_1 = function() { 13 var hoge = 1; 14 return this.a; 15} 16window.a = 1; 17document.write(obj_1(a)); 18=========================== 19③ 20function obj_2() { 21 this.a = 1; 22} 23 24var ins = new obj_2(); 25document.write(ins.a);
これらはfunctionオブジェクトと呼ばれているらしいのですが、たとえば②の例のthisはwindowオブジェクトを指していて、③の場合はobj_2()の関数オブジェクトからインスタンスを生成してinsに代入しているため、このときのthisはinsを指している。というのを理解しました。
そして関数オブジェクトのプロパティに関数を定義して、その関数の中のthisは何なのかを調べたのですが、
javascript
1// JavaScript Document 2function obj_2() { 3 this.a = a; 4} 5 6obj_2.c = function() { 7 return this; 8} 9 10document.write(obj_2.c()); // function obj_2() { this.a = a; }
こうなって、thisはfunctionオブジェクトを指していました。
なぜですか?
また、オブジェクトについてとても曖昧な点があるので教えていただきたいです。
オブジェクトを作る場合は、
JavaScript
1//JavaScript Document 2var obj = {name: 'hoge'}; // なじんだ書き方 3var obj = new Object({name: 'hoge'}); // 明示的な書き方
とあると知ったので、このObjectとは何かと思い
JavaScript
1document.write(Object);
とObjectが何なのか確認すると
javascript
1 function Object() { [native code] }
このように出力され、Objectとは関数オブジェクトなのか?と頭が混乱しています。
このObjectがオブジェクトの最上位?みたいな感じで、Objectの中にprototypeプロパティがあったりするのですよね?
このObjectをnew演算子を使い、初期化したのを変数に入れると暗示的なこのオブジェクト生成の書き方になるのでしょうか?
JavaScript
1//JavaScript Document 2var obj = {name: 'hoge'};
だとしたら別の変数で初期化したObjectを保持しているわけだから変数に代入したオブジェクトごとにprototypeプロパティのオブジェクトの中身も別々になるということになってこうなってると思うんですが、どうなのでしょうか?
javascript
1//JavaScript Document 2var Object = { 3 prototype: 'prototypeオブジェクト' 4} 5 6var name = new Object({tree: 'matsu'}); 7var food = new Object({okashi: 'ame'}); 8var hensu = 6; 9 10//オブジェクトを生成すると、自動でObjectオブジェクトの中に入る? 11 12Object = { 13 prototype: {prototypeオブジェクト....}, 14 15 window: { 16 name: {'tree: 'matsu'}, 17 food: {'okashi: 'ame'}, 18 hensu: 6, 19 } 20}
変なこと言ってると思いますが、どうぞよろしくお願いします
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/13 07:34