$(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>'); } }
▽2
●
匿名回答2号 ベストアンサー |
色々とチグハグなことをされていますし、なぜjQueryを使ってわざわざそんな後ろ向きな処理を行う必要があるのかがわからないですが....。
*以下の行の時点で、xとyを設定することができない。受け取れない。
// クラス定義
function Div() { ...
=======
*以下の行の時点でコンストラクタを作る意味がない。なぜなら、この時点で、xとyも参照されずに、returnしてしまっているし、この実行時のインスタンス化の際にthisはjQueryのラップ集合(この場合