以下のコードについて質問です。
変数mydivにはコンストラクタの戻り値のjQueryオブジェクトが格納されています。
こうすることによって、mydiv.jQueryメソッドと記述できるようにしました。
そして、この変数でインスタンス変数を参照したいのですが、うまくいきません。
以下の場合ですと、インスタンス変数はundefinedと表示されてしまいます。
インスタンス変数はどのようにして記述すればよいでしょうか?
環境
PC:imac
ブラウザ:Chrome
色々とチグハグなことをされていますし、なぜjQueryを使ってわざわざそんな後ろ向きな処理を行う必要があるのかがわからないですが....。
*以下の行の時点で、xとyを設定することができない。受け取れない。
// クラス定義
function Div() { ...
=======
*以下の行の時点でコンストラクタを作る意味がない。なぜなら、この時点で、xとyも参照されずに、returnしてしまっているし、この実行時のインスタンス化の際にthisはjQueryのラップ集合(この場合
$(function() { var mydiv = new Div(1, 2);//変数に戻り値のjQueryオブジェクトが入る mydiv.appendTo('body'); //インスタンス.jQeryメソッドと記述できる //mydivがjQueryオブジェクトのためインスタンス変数が参照できない console.log(mydiv.x); //undefinedと表示 }); // クラス定義 function Div() { return this.create(); this.x = x; this.y = y; } Div.prototype = { create: function() { return $('<div></div>'); } }
return するとその後のコードは実行しないです。
$(function() { var mydiv = new Div(1, 2);//変数に戻り値のjQueryオブジェクトが入る mydiv.appendTo('body'); //インスタンス.jQeryメソッドと記述できる //mydivがjQueryオブジェクトのためインスタンス変数が参照できない console.log(mydiv.x); //undefinedと表示 }); // クラス定義 function Div() { alert('いやっほう');//実行される return this.create(); alert('いやっほう');//実行されない this.x = x; this.y = y; } Div.prototype = { create: function() { return $('<div></div>'); } }
なのでこんな感じで書くといいでしょう。
$(function() { var mydiv = new Div(1, 2); mydiv.appendTo('body'); console.log(mydiv.x); // 1 }); // クラス定義 function Div(x, y) { var obj = this.create() obj.x = x; obj.y = y; return obj; } Div.prototype = { create: function() { return $('<div></div>'); } }
匿名回答1号さんは
console.logに目を向けているのですか?
バカ。
http://jsfiddle.net/2Nt7d/1/
↑の結果を見て、まだ納得がいかなければコメントください。納得がいったならコメントは結構です。
恥ずかしいのは分かるけど、これじゃ後から読んだ人がなにがなんだか分からんだろうにな。
new演算子の振る舞いはこれを参考にするといいよ。
http://nanto.asablo.jp/blog/2005/10/24/118564
まあ、頑張ってください