2016-10-03 8 views
0

アレイをコピーしようとしていますが、引き続き問題が発生します。私は2つの方法で試しましたが、どれも動作しません。アレイをコピーしようとしたときにエラーが発生する

第一試み:

function classA(id, arrayFrom, arrayTo) 
{ 
    this.id = id; 
    this.from = arrayFrom.slice(0); 
    this.to = arrayTo.slice(0); 
}; 

出力:

Uncaught TypeError: arrayFrom.slice is not a function

第二試み:

function classA(id, arrayFrom, arrayTo) 
{ 
    this.id = id; 
    this.from = {arrayFrom[0], arrayFrom[1], arrayFrom[2]}; 
    this.to = {arrayTo[0], arrayTo[1], arrayTo[2]}; 
}; 

出力:

Uncaught SyntaxError: Unexpected token [

+2

不具合の詳細。その関数への呼び出しとコードを共有します。 –

+2

メソッドは問題ありません。渡すものは何でも、配列ではありません。 – Yoda

+2

'arrayFrom'は配列ではありません。実際に何が表示されますか。 –

答えて

-1
function classA(id, arrayFrom, arrayTo){ 
    this.id = id; 
    this.from = arrayFrom.slice(0, arrayFrom.length); 
    this.to = arrayTo.slice(0, arrayTo.length); 
} 

私はちょうどあなたのコードを書く... :)さんはこれを試してみましょう。しかし、あなたの関数は配列をコピーしませんでした。あなたは本当のアレイを使用してインスタンスを初期化することができ

+0

"* arrayFrom.sliceは関数ではありません*" –

+0

配列を渡しているとは思われません:\ –

0

)。その後、エラーなく動作します。

function classA(id, arrayFrom, arrayTo) { 
 
    this.id = id; 
 
    this.from = arrayFrom.slice(0); 
 
    this.to = arrayTo.slice(0); 
 
} 
 

 
var aFrom = [1, 2, 3], 
 
    aTo = [42, 43, 44], 
 
    a = new classA(0, aFrom, aTo); 
 

 
aFrom[0] = 100; 
 
console.log(a); // the instance does not change to 100

0

あなたは、このようなインスタンスのノードリストとして反復可能な引数「のような配列」とClassAを呼ぶなら、あなたはthis.from = Array.from(arrayFrom)のように行うことができます。

function ClassA(id, arrayFrom, arrayTo) { 
 
    this.id = id; 
 
    this.from = Array.from(arrayFrom); 
 
    this.to = Array.from(arrayTo); 
 
} 
 

 
var obj = new ClassA(1,{0:"a",1:"b",length:2},{length:0}); 
 
console.log(obj);

Array.from()さえ供給オブジェクトがイテレータちょうどlength性質を持っていません動作します。

関連する問題