検索条件
全4件
(1/1ページ)
配列の要素数ではなく,インデックスの最大値+1を指す.
そのため,
var a = new Array(); a[0] = 0; // length -> 1 a[1] = 1; // length -> 2 a[100] = 100; // length -> 101 a[2] = 2; // length -> 101
になる...
要素数を知りたい場合カウントするしかないの?
var count = 0; for(var i in ary){ count++; }
class = function(o){ }
ここに定義するのは,オブジェクト名付きで呼び出されるメソッド類.thisを信用することができるもの.class内部からしか呼び出さないものは_を付ける.(_付きのメソッドを外部から呼び出しても動作は保証しない)
class.prototype = { func1: function(){ }, _func2: function(){ } }
イベントなどにより呼び出されるメソッド類.thisを信用できない.必要ならば,引数に自分自身を指すオブジェクトを入れる.
class.func3 = function(){ }
前と同じ罠にはまってしまった...
なにやってるんだか.
A = function(){} A.prototype = { pos: {x:0, y:0} } a = new A(); b = new A(); a.pos.x = 10; a.pos.y = 20; b.pos.x = 30; b.pos.y = 40; a.pos.x; // -> 30; a.pos.y; // -> 40; b.pos.x; // -> 30; b.pos.y; // -> 40;
正しくは↓の通り。
A = function(){ this.pos = {x:0, y:0}; } A.prototype = { pos: null } a = new A(); b = new A(); a.pos.x = 10; a.pos.y = 20; b.pos.x = 30; b.pos.y = 40; a.pos.x; // -> 10; a.pos.y; // -> 20; b.pos.x; // -> 30; b.pos.y; // -> 40;
一度,以前作ったプログラムも見直した方がいいかもしれない
微妙にはまった罠
A = function(){} A.prototype = { data: new Array(), push: function(a){ this.data.push(a); }, pop: function(){ return this.data.pop(); } } a = new A(); b = new A(); a.push('1st'); a.push('2nd'); b.push('3rd'); a.pop(); // -> '3rd' b.pop(); // -> '2nd' a.pop(); // -> '1st'
当然と言えば当然だけど、ポインタ的なものが見えにくいので原因がわかるまで時間がかかりました。というか、C++のクラスとJavascriptのプロトタイプの違いがわかった気がする。正しくは↓の通り。
A = function(){ this.data = new Array(); } A.prototype = { data: null, push: function(a){ this.data.push(a); }, pop: function(){ return this.data.pop(); } } a = new A(); b = new A(); a.push('1st'); a.push('2nd'); b.push('3rd'); a.pop(); // -> '2nd' b.pop(); // -> '3rd' a.pop(); // -> '1st'
オブジェクトを生成するたびに data そのものを正しく初期化する必要あり。