2017-02-06 6 views
0

以前の質問では、私は照会の際に複数のオブジェクトキーを受け取りました。それを超えて、私は非常に小さなオブジェクトの例を構築して、オブジェクトの操作方法を発見しました。私はmacbook air 2(yosemite)-upptodateでFirefox 51.0.1を使っています。私が得ている結果は全く説明できません。誰かがこれらの結果を説明でき、これを修正する方法を提案できますか?OBJ aprop出力 Javascriptオブジェクトの不思議な振る舞いを避けるには?

オブジェクト0
J 0キーOBJ bprop(キー)1
J 1つの鍵(キー) "1"
J 2キーのcpropのOBJ(キー)1予想

]
0:(aprop):[1]、(bprop):[ "2"]、(のcprop):[1] OBJ aprop]、
オブジェクト1
J 0キー(鍵)2
j 1キーbprop obj(キー) "two"
[2]、[bprop]:["two"]、(cprop):[[2,2]]、
:(aprop):[2]、[cprop]物体2
OBJ aprop J 0キーOBJ bprop(キー)3
J 1つの鍵(キー) "三" J 2キーのcpropのOBJ(キー)[3,3,3]
2:(aprop): 3、(bprop):[ "3"]、(のcprop):[[3,3,3]]、

実際の出力

オブジェクト0
OBJ apropJ 0キーOBJ aprop(キー)1
J 1つのキーOBJ aprop(キー)1
J 2鍵(キー)1
0:(aprop):[1]、(aprop):[1 ]、(aprop):[1]、
オブジェクト1
J 0鍵bpropのOBJ(キー)は、2つの
J 1キーbpropのOBJ(キー)は、2つの
OBJ bprop J 2鍵(キー)は、2つの
1 (bprop):[2]、(bprop):[2]、
オブジェクト2
j 0キーcprop obj(キー)3,3,3
(cprop):[3(3,3,3)]、[cprop]:[3(3)3]、[cprop]、[cprop]、[cprop] 、3,3]、(のcprop):[3,3,3]、

var objList = []; 
 

 
class TestObj { 
 
    constructor(aprop, bprop, cprop) { 
 
    this.aprop = aprop; 
 
    this.bprep = bprop; 
 
    this.cprep = cprop; 
 
    this.dprop = 0; 
 
    } 
 
    getAprop() { 
 
    return aprop; 
 
    } 
 
    getBprop() { 
 
    return bprop; 
 
    } 
 
    getCprop() { 
 
    return cprop; 
 
    } 
 
    getDprop() { 
 
    return dprop; 
 
    } 
 

 
    setAprop(arg) { 
 
    aprop = arg; 
 
    } 
 
    setBprop(arg) { 
 
    bprop = arg; 
 
    } 
 
    setCprop(arg) { 
 
    cprop = arg; 
 
    } 
 
    setDprop(arg) { 
 
    dprop = arg; 
 
    } 
 
} 
 

 
var keylist = ["aprop", "bprop", "cprop"]; 
 

 
function create() { 
 
    putList(); 
 
    var t1 = objList[1]; 
 
    alert("fromlist " + t1); 
 

 
    for (var i = 0; i < objList.length; i++) { 
 
    var s = "" + i + ": "; 
 
    var obj = objList[i]; 
 
    console.log(" object " + i); 
 
    for (var j = 0; j < keylist.length; j++) { 
 
     var key = keylist[i]; 
 
     console.log(" j " + j + " key " + key + " obj(key) " + obj[key]); 
 

 
     s += "("; 
 
     s += key; 
 
     s += ")"; 
 
     s += ": "; 
 
     s += "["; 
 
     s += obj[key]; 
 
     s += "]"; 
 
     s += ","; 
 
    } 
 
    console.log(s); 
 
    } 
 
} 
 

 
function putList() { 
 
    onlist(1, "one" [1]); 
 
    onlist(2, "two", [2, 2]); 
 
    onlist(3, "three", [3, 3, 3]); 
 
} 
 

 
function onlist(a, b, c) { 
 
    var item = new TestObj(); 
 
    item["aprop"] = a; 
 
    item["bprop"] = b; 
 
    item["cprop"] = c; 
 
    objList.push(item); 
 
} 
 

 
create();

+0

文字列連結を使用してオブジェクトを作成するのはなぜですか? – Satpal

+1

'var key = keylist [i];' - それは 'keylist [j]'であってはなりませんか?私は 'forEach'や' _.each'(underscore.jsから)を使ってそのような間違いを避けることをお勧めします。 – yeputons

+1

'getAprop(){return aprop; } 'be 'getAprop(){this.apropを返します。 } '?あなたのセッターにも同じです。それ以外の場合は、インスタンスプロパティ値ではなくグローバルプロパティ値を設定して取得しています。 – RobG

答えて

0

あなたがあるため、いくつかのタイプミスに期待される出力を取得されていません。

  1. var key = keylist[j]; //私はpoの代わりにjを使う必要がありますコメントでyeputons
  2. onlist(1, "one", [1]); // (カンマ)によるテッドがここで行方不明になった

固定スニペット:(出力として期待されている)

var objList = []; 
 

 
class TestObj { 
 
    constructor(aprop, bprop, cprop) { 
 
    this.aprop = aprop; 
 
    this.bprep = bprop; 
 
    this.cprep = cprop; 
 
    this.dprop = 0; 
 
    } 
 
    getAprop() { 
 
    return aprop; 
 
    } 
 
    getBprop() { 
 
    return bprop; 
 
    } 
 
    getCprop() { 
 
    return cprop; 
 
    } 
 
    getDprop() { 
 
    return dprop; 
 
    } 
 

 
    setAprop(arg) { 
 
    aprop = arg; 
 
    } 
 
    setBprop(arg) { 
 
    bprop = arg; 
 
    } 
 
    setCprop(arg) { 
 
    cprop = arg; 
 
    } 
 
    setDprop(arg) { 
 
    dprop = arg; 
 
    } 
 
} 
 

 
var keylist = ["aprop", "bprop", "cprop"]; 
 

 
function create() { 
 
    putList(); 
 
    var t1 = objList[1]; 
 

 
    for (var i = 0; i < objList.length; i++) { 
 
    var s = "" + i + ": "; 
 
    var obj = objList[i]; 
 
    console.log(" object " + i); 
 
    for (var j = 0; j < keylist.length; j++) { 
 
     var key = keylist[j]; 
 
     console.log(" j " + j + " key " + key + " obj(key) " + obj[key]); 
 

 
     s += "("; 
 
     s += key; 
 
     s += ")"; 
 
     s += ": "; 
 
     s += "["; 
 
     s += obj[key]; 
 
     s += "]"; 
 
     s += ","; 
 
    } 
 
    console.log(s); 
 
    } 
 
} 
 

 
function putList() { 
 
    onlist(1, "one", [1]); 
 
    onlist(2, "two", [2, 2]); 
 
    onlist(3, "three", [3, 3, 3]); 
 
} 
 

 
function onlist(a, b, c) { 
 
    var item = new TestObj(); 
 
    item["aprop"] = a; 
 
    item["bprop"] = b; 
 
    item["cprop"] = c; 
 
    objList.push(item); 
 
} 
 

 
create();

ノート:setters/gettersは使用されていません、私は参照のためのsnippetとしてそれらを残しました。

関連する問題