クラス内からインスタンス先の名前を参照する方法はあるのか?

このQ&Aのポイント
  • クラス内からインスタンス先の名前を参照することはできるのでしょうか?JavaScriptにおいて、インスタンスの名前を取得する方法について考えてみましょう。
  • 例えば、あるクラスの中でインスタンスの名前を取得してセットすることは可能でしょうか?インスタンス先の名前を参照する方法について、疑問点がある場合は以下の解説をご覧ください。
  • 逆に、インスタンスの名前を取得することができない場合は、他の方法を使用する必要があります。例えば、インスタンス化時に名前を渡すなどの方法が考えられます。
回答を見る
  • ベストアンサー

クラス内からインスタンス先の名前を参照する事は出来るのでしょうか

クラス内からインスタンス先の名前を参照する事は出来るのでしょうか 例えば function hoge(){  this.dispname=function{   alert("xxxxx");  } } を  var fuga1=new hoge();  var fuga2=new hoge(); とインスタンスして、  fuga1.dispname();  fuga2.dispname(); とした時 xxxxにそれぞれ'fuga1'、'fuga2'といった名前 を取得してセットすることは可能でしょうか? 逆なら、  alert(fuga1.constructor.name); //Alerts "hoge"  alert(fuga1.constructor.name); //Alerts "hoge" と出来る。 ※インスタンスする時に名前を渡すしかないんでしょうか。  var fuga1=new hoge('fuga1');みたいに...

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

思いつきですみません、とりあえずwindowを総なめするとか? <script> function hoge(){} hoge.prototype.dispname=function(){ for(var i in window){ if(window[i]==this){ alert(i); break; } } } var fuga1=new hoge(); var fuga2=new hoge(); fuga2.dispname(); fuga1.dispname(); </script>

yyr446
質問者

お礼

回答ありがとうございます。 これでいけそうですね。

その他の回答 (4)

  • think49
  • ベストアンサー率59% (285/482)
回答No.5

#3, 4 です。 #3 で書き忘れましたが、一般には prototype の方が高速だといわれています。 ちなみに、プロトタイプチェーンは Hoge.prototype を指定したから行われる処理というわけではなく、常に行われる処理です。 # プロパティ走査では直属のプロパティから確認するので、プロトタイプオブジェクトを意識することは少ないと思いますが、念のため。 11.2.1 プロパティアクセス演算子 - 11 式 (Expressions) http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/11_Expressions.html#section-11.2.1 8.7.1 GetValue (V) - 8 型 (Types) http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/8_Types.html#section-8.7.1 8.6.2.1 [[Get]] (P) - 8 型 (Types) http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/8_Types.html#section-8.6.2.1 >  window[ jsonp ] = window[ jsonp ] || function( tmp ) { jquery-1.4.2.js における5015行目でしょうか。 line 5015: window[ jsonp ] = window[ jsonp ] || function( tmp ) { コールバック関数を定義しているっぽいですね。 「JSONPを実行後、削除する処理」のようですが、jQuery.ajax() では jsonpCallbackプロパティでコールバック関数名を明示的に渡しているようなので、window のプロパティ走査ではないと思います。 jQuery.ajax() ? jQuery API http://api.jquery.com/jQuery.ajax/ 無題メモランダム: jQueryでJSONP http://blog.mudaimemo.com/2008/09/jqueryjsonp.html > // Handle memory leak in IE > script.onload = script.onreadystatechange = null; IE6SP2- のメモリリークパターンですね。(IE6 SP3で修正済みです) Internet Explorer リーク パターンを理解して解決する http://msdn.microsoft.com/ja-jp/library/bb250448%28VS.85%29.aspx これでできる! クロスブラウザJavaScript入門:第2回 完全版:ブラウザとデバッグ環境|gihyo.jp … 技術評論社 http://gihyo.jp/dev/serial/01/crossbrowser-javascript/0002?page=5 attachEvent(), on****イベント属性への関数定義で、関数の中に関数を内包する形にすると発生しやすいリークパターンです。 非常に影響範囲が大きく、MSからは必要なくなったイベント属性は削除することが勧められています。 window.onunload = function () {  element.onclick = null; // onclickイベントハンドラ属性は null を代入するとイベントハンドラを削除できる } 関数を入れ子にしなければ条件が成立しないので、リークパターンを知っている人は「可能な限り、関数を入れ子にしない(クロージャを無駄に生産しない)方がよい」とよく指摘します。 また、DOMノードだけでなく、ActiveXObject でも発生するのでかなり厄介です。 http://vird2002.s8.xrea.com/test/XMLHttpRequest.html

yyr446
質問者

お礼

think49さん、詳しく調べてくださってありがとうございました。  OBJECT指向については、まだまだ理解出来てませんが、 いろんなのを作ったり見たりしていると、徐々にではありますが 解ってくるような気がします。  prototype拡張についてはこの夏の課題として、じっくり試して みるつもりです。  明日から旅に出ます。またお会いするまでさようなら。

  • think49
  • ベストアンサー率59% (285/482)
回答No.4

#3 です。 > と同じと思ってよいのでしょうか?何か利点があるんでしょうか? #3 の [お礼] に書かれたコードはコンストラクタ関数が実行される度に関数オブジェクトを生成しています。 function Hoge () { // コンストラクタ関数  this.create = function () { }; // コンストラクタ関数が実行される度に関数オブジェクトを生成する } var foo = new Hoge(); // コンストラクタ関数を実行する 対して、Hoge.prototype はコンストラクタ関数が実行される度に関数オブジェクトを生成しない特徴があります。 function Hoge () { // コンストラクタ関数  // コンストラクタ関数が実行されるときには何もしない } Hoge.prototype.create = function () {}; // 生成されたオブジェクトから参照される var foo = new Hoge(); // コンストラクタ関数を実行する foo.create(); // プロトタイプチェーン (foo直属のプロパティを参照し、なければプロトタイプオブジェクトのプロパティを参照する。以降、プロトタイプオブジェクトがなくなるまで参照を遡る。) #3 の [お礼] のように、いわゆるクロージャを使う方法はプライベート変数(ゲッタメソッドを使用しないと、外部からアクセスできない変数)を定義する時に有効ですが、今回のケースでは prototype を利用した方が効率的だと思います。 Hoge.prototype.init はコンストラクタ関数で生成したオブジェクトを使い回しできるように、です。 状況によりますが、生成したオブジェクトの状態を保持する必要がない場合、 var foo = new Hoge(document, 'foo1'); foo.init(document, 'foo2'); foo.init(document, 'foo3'); foo.init(document, 'foo4'); foo.init(document, 'foo5'); このように、使い回すことが出来ます。 (...次の記事に続きます...)

  • think49
  • ベストアンサー率59% (285/482)
回答No.3

> fuga1にインスタンスしたhogeクラス内で、<script>を動的生成して、JSONPするんですが、 > そのコールバック関数をクラス内に予め定義しておきたいのです。 直接的な回答ではなく、代替案になりますが、こういう方法はどうでしょうか? <script type="text/javascript"><!-- (function () {  function Hoge () {   this.init.apply (this, arguments);  }  Hoge.prototype.init = function (doc, callbackname) {   var win = doc.defaultView || doc.parentWindow;   win[callbackname] = function () { alert('callbackfn: ' + callbackname); };   this.callbackname = callbackname;   this.create(doc);  }  Hoge.prototype.create = function (doc) {   var script = doc.createElement('script');   script.type = 'text/javascript';   script.src = './hoge.php?callback=' + this.callbackname;   doc.getElementsByTagName('head').item(0).appendChild(script);  }  var fuga = new Hoge(document, 'foo1');  fuga.init(document, 'foo2'); })(); foo1(); // callbackfn: foo1 foo2(); // callbackfn: foo2 //--></script>

yyr446
質問者

お礼

ありがとうございます。 外から、引数でコールバック関数名を渡すのですね。 やはりその方法が賢明なのかも。 ところで、別質問になっちゃうかもかもしれませんが、 よくわからないのですが、 function Hoge () {   this.init.apply (this, arguments);  } Hoge.prototype.init = function (doc, callbackname) {   var win = doc.defaultView || doc.parentWindow;   win[callbackname] = function () { alert('callbackfn: ' + callbackname); };   this.callbackname = callbackname;   this.create(doc);  } ------ としているのは、 function Hoge () {   this.init = function (doc, callbackname) {   var win = doc.defaultView || doc.parentWindow;   win[callbackname] = function () { alert('callbackfn: ' + callbackname); };   this.callbackname = callbackname;   this.create(doc);  }   this.create = function (doc) {   var script = doc.createElement('script');   script.type = 'text/javascript';   script.src = './hoge.php?callback=' + this.callbackname;   doc.getElementsByTagName('head').item(0).appendChild(script);  } } と同じと思ってよいのでしょうか?何か利点があるんでしょうか?

yyr446
質問者

補足

jQueryさんだと、どうやって実現しているのかとソースを 覗いて見たんですけど、No.1さんの回答に近い方法の window[]の検索をやってるみたいでした。(間違ってるかも)  window[ jsonp ] = window[ jsonp ] || function( tmp ) {  .... また、後処理で // Handle memory leak in IE script.onload = script.onreadystatechange = null; なんてコードが入ってた、ほったらかしはよくないのかも..

回答No.2

こんばんは。 利用する場面がわからないので、変な回答かも知れませんが・・・、 function hoge()  this.dispname = function() {   for (var varname in hugas) {    if (hugas[varname] == this) alert(varname);   }  } } var hugas = {}; hugas.fuga1 = new hoge(); hugas.fuga2 = new hoge(); hugas.fuga1.dispname(); hugas.fuga2.dispname(); ぐらいしか思い付きません・・・。 まぁ、配列使ってる時点でインチキですが・・・。

yyr446
質問者

補足

回答ありがとうございます。 利用する場面は、 fuga1にインスタンスしたhogeクラス内で、<script>を動的生成して、JSONPするんですが、 そのコールバック関数をクラス内に予め定義しておきたいのです。 JSONPリクエスト生成する時のパラメーターとして <script src="......&callback=fuga1.dispname" type="text/javascript".... のfuga1が取得したかったんです。

関連するQ&A

  • JSのクラスについての質問

    JSのクラスについての質問 ソース class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } //インスタンス作成 var clsObj = new Cat("my cat"); //インスタンス(オブジェクト)の中身を出力 console.log(clsObj); 初心者なのでこの中のどの記述が必須で、 またnameはどれと対になっているかがわかりません。 インスタンスはnew クラス名 となっている所で作成されて変数に作られたインスタンスが代入されるというのは何となく分かったのですが、 console.log(clsObj); VM793:9 Cat {name: "my cat"} となるのがいまいちわかりません。 new Cat("my cat");は class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } を実行するという事で、 引数は constructor(name) new Cat("my cat"); が対になっているのでnameがmycatに代わるという事でしょうか? new Cat("my cat");が実行された結果がインスタンスという事ですが、 mycatがインスタンスなのですか? 大変恐縮ですが、簡単に一連の流れを教えていただければ幸いです。 class Cat { constructor(name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } にどう渡されてどのように処理され何がインスタンスとして吐き出されるのでしょうか?

  • JavaScriptでインスタンスを比較してみたい

    JavaScriptでインスタンスを比較してみたいのですが、色々分からないことがあるので教えてください。 ■質問1 ・そもそも、JavaScriptにインスタンスはあるのでしょうか? ■質問2 ・下記で「hoge1」「hoge2」はインスタンスではないのでしょうか?(単にオブジェクトを取得しているだけ?) var myApp = {  point: 0,  setPoint: function(p){   this.point= p;  },  getPoint: function(){   return this.point;  } }; myApp.point = 5; var hoge1 = myApp.getPoint(); var hoge2 = myApp.getPoint(); console.log( hoge1 === hoge2 ); // true ■質問3 ・「Object.create」か「new」すれば、インスタンス生成できる? ■質問4 ・インスタンスの比較はどうやるのでしょうか? ・「===」?

  • JSのクラスについて

    JSのクラスについて https://okwave.jp/qa/q9320085.html の続き >>> >するとCat.nameとなりCatクラスという箱の中に入っているnameプロパティ?いや引数という事なのでしょうか? 引数ではなくプロパティです、ここではクラス内部のローカル変数と説明しているモノです(初心者に分かりやすいか どうかは別としてプロパティと言った方が正確ですね)。 関数内部(関数が持っている)のローカル変数は ご存知ですか?、それに類似しています、この場合はクラス内部(クラスが持っている)のローカル変数と言うイメージです。 Cat.nameとなりCatクラスという箱の中に入っているnameプロパティなのですね。 nameとコンストラクタの引数があるのでthis.nameのnameも引数なのかと思ったのですが、ドットつながりなのでcatクラス(オブジェクト)の中にあるnameプロパティ という事ですね。 関数のスコープの中で宣言する変数のことですよね。 巻き上げが起こる変数ですね。 これとクラス内の変数はほぼ同じ挙動をするという事ですか? するとスコープがクラスにもあるのでしょうか? 巻き上げも >>> >なぜこの例えはこんなわかりにくいことをしたんですかね? 恐らく同じ名前でも「this.」が付いてるか付いてないかで区別できるので、同じ名前でもコンフリクト(衝突、競合)せずに使えると言う例を示したかったのかもしれません。 thisで別の引数?の物と区別できるという事を伝えたかったのですね。 ただ二つはコンストラクタの引数でthis.nameだけはそもそも引数ではなくプロパティなので、 仮にかぶっても問題ないのでしょうね。 >>> >変数と似ている箱で 変数と違う箱と考えて下さい。 オブジェクト、クラス、関数、変数などいろいろな箱がありこんがらがるのですが、 もしかしてこれらはすべて変数なのですか? つまり箱はすべて変数で、これらは少し個性の違う変数なのでしょうか? >>> >特殊な箱でなんでも好きに入れ替えできず、 >入れられるものと入っていなくても良いものが固定されている箱という事でしょうか? >つまり変数と違ってコンストラクタが絶対に入っている箱なのですね。 初期設定が必要ないなら、コンストラクタは必要ないようです。 クラスをインスタンス化したい場合のみコンストラクタは必要で、 インスタンス化が不要なクラスなら必要ないという事でしょうか? ただクラスはインスタンス化しないと利用できないので、 文法上はコンストラクタなしでも良いが、実際はそのようなことはあり得ないという事でよいでしょうか? またインスタンス化と初期設定の違いが判らないのですが、イコールと考えてよいでしょうか? >>> >入れられないものもあるのですか? クラス内クラスは無理なようです。 それ以外はオブジェクトのように入れられるのですね。 >>> >var コンストラクターの「name」= my cat;という事ですかね? その説明は変な感じです、実際のプロセスを考えて下さい(「my cat」ではなく"my cat"文字列です)。 new Cat("my cat") ←ここでコンストラクターの「name」仮引数に"my cat"文字列が代入され、「constructor(name) {this.name = name}」が呼ばれます。 constructor(name) {this.name = name} とは constructor関数の中に中カッコ内の式があり、 catクラス内のnameプロパティにconstructorの引数nameを代入するという事ですよね。 不思議なのはconstructorの引数nameを代入する部分なのですが関数の引数を代入するというのは初めて見ました。 仮引数nameなので constructor(name) { var name = "my cat"; this.name = name } という事ですよね。 つまり下記のcatクラスの引数が実引数になるという事ですよね。 //インスタンス作成 var clsObj = new Cat("my cat"); 関数であれば関数の呼び出しにある引数が実引数として代入されますが、 クラスの場合はconstructor関数の呼び出しにある引数ではなく クラスのインスタンス化にある引数が実引数として代入されるというルールなのですね。 constructor関数の呼び出しがないのが不思議でしたが、 constructor関数は定義するだけで呼び出しはしなくても実行されて、インスタンスを作成するのですね。 そして constructor(name) { var name = "my cat"; this.name = "my cat" } となりプロパティnameに文字列mycatが代入されるのですね。 >>> 「インスタンスの引数」と言うのは違います。 new Cat("my cat"):Catクラスに実引数"my cat"文字列を設定しnewすると、コンストラクターの「name」仮引数に"my cat"文字列が代入され、「constructor(name) {this.name = name}」が呼ばれ、インスタンスが生成されます。 こちらも上記の説明で正しいでしょうか? >>> コンストラクターが在る場合もコンストラクターは初期設定だけです。 クラス"設計図"からインスタンス"実態"を作成すると言う事で、例えるなら十徳ナイフの"設計図"から十徳ナイフの"実態"を作成すると言うイメージして下さい。 (十徳ナイフの"実態"を作成しても)十徳ナイフが置いてあるだけでは何も役に立ちません、十徳ナイフは使ってこそ役に立つ訳です、例えば十徳ナイフの「栓抜き」(機能)を使うと言うのが「栓抜き」メソッド、「缶切」(機能)を使うと言うのが「缶切」メソッドに対応すると言うイメージです。 なるほどクラスがナイフの設計図で、constructor、newクラス名がナイフを作るための作業で、 ナイフがインスタンス化されたオブジェクトですが、この時点では何のメリットもないのですね。 インスタンス化されたオブジェクトを使う作業がメソッドという事ですね。 下記例ですとnew Cat("my cat");がナイフを具現化する作業(constructorもこれに当たる?)で、 実際に使うメソッドはここにはないのですかね? class Cat { (name) {this.name = name} meow() {alert( this.name + 'はミャオと鳴きました' )} } //インスタンス作成 var clsObj = new Cat("my cat"); //インスタンス(オブジェクト)の中身を出力 console.log(clsObj); >>> 仮引数とローカル変数(プロパティー)とは違います。 ローカル変数(プロパティー)はクラスの箱の中に定義されるモノです(添付画像参照)。 上記でも記載した、仮引数と実引数が実質var name = "my cat";というローカル関数と同じ結果になるという意味で書いたのですが、 それでも違うでしょうか? もちろん同じものではないですが、実質同じ結果にはなるのですよね。 >>> そして constructor(name) { var name = "my cat"; this.name = "my cat" } となりプロパティnameに文字列mycatが代入されるのですね。 下記が同じ結果になるという意味なのでしょうね。 >>> 申し訳ございません訂正です、引数を引数としか考えてませんでしたが、ローカルと言われれば確かに引数もローカル変数でした。 関数のローカル変数とインスタンスのプロパティーは類似していますが、インスタンスのプロパティーは値が保持されます。 ちなみに(コンストラクター以外は)クラスの構造がインスタンスの構造に反映されます(添付画像参照)。 関数のローカル変数とインスタンスのプロパティーは類似していますが、インスタンスのプロパティーは値が保持されます。 ここがよくわからないのですがconstructor(name)のnameは引数ではなくプロパティなのですか? 見た目は引数に見えますが、違いとしてはプロパティは値が入れられる箱であり、 仮引数はローカル変数名でしかなく、ローカル変数そのものではないので、箱ではなく、値を入れられないのですかね?

  • javascriptのconstructorプロパティについて

    constructorプロパティとは、 オブジェクトの初期化で使用されたコンストラクタ関数を参照 とのことなので、下記2パターンのPGを作成しました 1.prototypeの明記なし function Hoge(){ this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 True init - Hogeで初期化 getInit - function () { return this.init; } 2.prototypeの明記あり function Hoge(){ this.initialize.apply(this,arguments); this.init = "Hogeで初期化"; this.getInit = function(){ return this.init; } } Hoge.prototype ={ initialize:function(){ this.init = "Hoge.prototype.initializeで初期化"; }, getInit:function(){ return "Hoge.prototype.getInit()"; } } var obj = new Hoge(); alert(obj.constructor == Hoge); for(prop in obj){ alert( prop + " - " + obj[prop]); } //実行結果 false init - Hogeで初期化 getInit - function () { return this.init; } initialize - function () { this.init = "Hoge.prototype.initialize\u3067\u521D\u671F\u5316"; } ・質問内容 prototypeの明記なしの場合は、Hogeのコンストラ関数を参照している(結果がTrueのため) prototypeの明記ありの場合は、falseのためコンストラ関数を参照していないのですが、 prototype明記あり、なしで結果が異なる理由が分からない状態です。 (prototype.constructorにも手を出したのですが、上記が解決しないため  constructorプロパティに関してのみ質問した次第です) ネット、書籍等で調べたのですが、検討がつかない状態です。 お手数ですが、ご教授お願い致します。

  • (function(){})()の意味

    (function(){})() の意味がよくわからずに困っています。 下記の2タイプではどう意味が変わってくるのでしょうか? (1)var fuga = function(){}; (2)var fuga = (function(){})(); 下記のコードで実験してみたところ、 --------------------- var fuga = function(){ this.obj = 'value'; }; var fuga = (function(){ return { obj = 'value'; }; })(); --------------------- (1)の場合は、newしないとfugaオブジェクトのメンバを使用できない、 (2)の場合は、newしなくてもfugaオブジェクトのメンバを使用できるようなのですが、 (2)で(function(){})を取り除いて出てくる()はnewのエイリアスだったりするのでしょうか? 

  • コンストラクタとプロトタイプについて

    ネットで検索したりして調べているのですがいまいちわからなかった箇所が あるので質問させていただきます。 コンストラクタで設定するのとプロトタイプで設定する違いがいまいちわかりません。 例えば function Test { this.prop = hoge; } Test.prototype.prop1 = hogehoge; の場合 コンストラクタのほうが優先されてhogeがでるのはわかるのですが 下記の場合はプロタイプのほうが優先されてhogehogeと出てしまうのは どうしてでしょうか? <script language="javascript"> <!-- //コンストラクタ function Test(){alert("hoge"); } //prototypeでセット Test.prototype=alert("hogehoge"); //オブジェクト作成 var TEST = new Test(); window.onload=TEST; --> </script>

  • クラス、オブジェクト、インスタンスの理解で?

    お尋ねします。 既に、バリバリオブジェクト指向でプログラムを書いている方が多いので恐縮ですが、とあるサイトのオブジェクトのサンプルを使って、下記のようにサンプルソースを書いてみました。 --以下ソース--- <?php class Nerimono { private $name; public function __construct() { $this->name= 'ねりもの'; } public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } $objectNerimono = new Nerimono(); $objectKamaboko = new Nerimono(); $objectKamaboko->setName('かまぼこ'); $objectHanpen = new Nerimono(); $objectHanpen->setName('はんぺん'); echo 'Nerimono オブジェクトの $objectNerimono 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectNerimono の private $name に「' . $objectNerimono->getName() . '」と、既に書いたあった'; echo "\n"; echo 'Nerimono オブジェクトの $objectKamaboko 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectKamaboko の private $name に「' . $objectKamaboko->getName() . '」と書いた'; echo "\n"; echo 'Nerimono オブジェクトの $objectHanpen 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectHanpen の private $name に「' . $objectHanpen->getName() . '」と書いた'; echo "\n"; --ここまで--- そして、これの実行結果が下記です。 C:\Temp>php Nerimono.php Nerimono オブジェクトの $objectNerimono 実体(インスタンス)を生成した。 $objectNerimono の private $name に「ねりもの」と、既に書いたあった Nerimono オブジェクトの $objectKamaboko 実体(インスタンス)を生成した。 $objectKamaboko の private $name に「かまぼこ」と書いた Nerimono オブジェクトの $objectHanpen 実体(インスタンス)を生成した。 $objectHanpen の private $name に「はんぺん」と書いた このコメントのような解釈で、合っておりますでしょうか? 今までオブジェクト指向のメリットが全然理解できず、関数の変わった呼び出し方法としか、理解できていませんでした。 PHPは、本来のオブジェクト指向とは違うようだとは、知っているつもりです。(Pブジェクト思考?w) 間違っているところあれば、ご指摘ください。m(_。_)m PHPは、Ver 5.3.5 です。

    • 締切済み
    • PHP
  • newでコンストラクタ関数が受け取った引数の行き先

    ・Test1とTest2で何が違うのでしょうか? ・Test1のtenは、this.scoreで生成するインスタンスプロパティへ格納 ・Test2のtenは、どうなっているのでしょうか? ・どこへも格納していないのに、「new Test2('100');」で文が終わった後、呼び出せている理由は? ■Test1 var Test1 = function (ten) {  this.score = ten;  this.getScore = function() {   alert(this.score);  } } var result1 = new Test1('100'); result1.getScore(); ■Test2 var Test2 = function (ten) {  this.getScore = function() {   alert(ten);  } } var result2 = new Test2('100'); result2.getScore(); ■下記★部分の「alert(this.score);」「alert(ten);」何れも100と表示されるのですが、中でどういう処理が走ってそういう結果になるのでしょうか? var Test3 = function (ten) {  this.score = ten;  this.getScore = function() { //★  alert(this.score);   alert(ten); } } var test3 = new Test3('100'); test3.getScore();

  • インスタンス生成について

    いつもお世話になっております。 今回はインスタンス生成について質問させて下さい。 String クラスのインスタンス生成は、 String str1 = new String(); のように明示的に new 演算子を用いる方法と、 String str2 = "hoge"; のように生成する方法がありますよね。 str2 の方は、JVM が(?) 勝手にコンストラクタを呼び出してくれて、 インスタンスを生成してくれる、という認識でよいのでしょうか? また、明示的に「 new 演算子 + コンストラクタ」でインスタンスを生成する場合と、 そうでない場合の使い分けなどはあるのでしょうか? そもそも String 以外に、このような複数のパターンでインスタンスを生成することができる クラスは他にもあるのでしょうか? 以上、ご教授宜しくお願い致します。

    • ベストアンサー
    • Java
  • クラスについて

    こんにちわ。以前お世話になりました。 クラスについての質問です。 DBとしてPostgreSQLを使用します。 店コード(store_cd)を入力すると、名前(store_name) をDBから取ってくるクラスを作りたいのですが、 以下のようにクラス定義をしみましたがうまくいきませ ん。すごく見当違いなことをしていたらすみません。。 どなたかよろしくお願いします。 <?PHP // コードクラス class clsCode { // メンバ(プロパティ)の宣言 var $cd; // コンストラクタ function clsCode() { $this->cd; } // デストラクタ function Destroy() { unset($this); } // 名前を求めるメソッド function getName($fltcd) { $sql="select store_name from store_basic where store_cd=$this->cd"; }

    • ベストアンサー
    • PHP

専門家に質問してみよう