0

関数から配列の値を設定する方法は? 問題は、変数値を設定する前にインデックスの値を変更する必要があるためです。

function foo(arr) {
    this.arr=arr;
}

var f = new foo(['a', 'b', 'c']);

// I had thinked in use a function like this one
// Note thta I used index to pass an array wich could
// be greater than 1 dimension.

foo.prototype.setv = function(index, v) {
    this.arr.index = v;
}

// but it does not works like I was expecting
idx = [1];
foo.setv(idx, "Z");
4

4 に答える 4

3

これ:

this.arr.index = v;

これである必要があります:

this.arr[index] = v;

コードでは、「index」という名前の配列のプロパティを値に設定しています。これは、実際にはindexsetter関数に渡された引数を使用しません。設定にブラケット記法を使用すると、index引数を配列の実際のインデックスとして使用できます。

しかしまた、あなたの予想される使用法は奇妙です:

idx = [1];
foo.setv(idx, "Z");

なぜidx配列なのですか?内部配列の特定のインデックスを値に設定する場合は、インデックスのみを渡す必要があります。したがって、それは単純である方が理にかなっています。

idx = 1;
foo.setv(idx, "Z");
于 2012-10-19T18:41:37.367 に答える
1
foo.prototype.setv = function(index, v) {
    this.arr[index] = v;
}

idx = 1;
foo.setv(idx, "Z");
于 2012-10-19T18:41:49.797 に答える
0
foo.prototype.setv = function(index, v) {
    this.arr[index[0]]= v;
}
于 2012-10-19T18:41:20.983 に答える
0

あなたが投稿したコードにはかなりの間違いがあります:

// capitalizing "constructors" is a good standard to follow
function Foo(arr) {
    this.arr = arr;
}

var f = new Foo(['a', 'b', 'c']);

Foo.prototype.setv = function(index, v) {
    // you access array indices via arr[index], not arr.index
    this.arr[index] = v;
}

// idx should be a number, not an array
idx = 1;

// you call the prototype function on the new'd object, not the "class"
f.setv(idx, "Z");

http://jsfiddle.net/2mB28/

于 2012-10-19T18:52:28.073 に答える