0
<html>
    <head>


        <style type="text/css">
            #mycanvas{
                width:500px;
                height:450px;
                border:2px solid green;

                font-size:30px;
            }
        </style>

        <script>
            window.onload = function (){
                vcan = {};
                vcan.main = {}
                vcan.main.repNode = [];
                vcan.main.currentTransform = {'id':0, 'name':'myobj'}

                document.getElementById("mycanvas").addEventListener('mousemove', mymousemove);

                function mymousemove(){
                    var  currAdTime = new Date().getTime();
                    console.log(currAdTime);
                    var myObj = extend(vcan.main.currentTransform , {mdTime:currAdTime, func:'add'})
                    vcan.main.repNode.push(myObj);
                }

              function    extend (fobj, sobj){
                    if((typeof fobj == 'object') && (typeof sobj == 'object')){
                    for(var prop in sobj){
                        fobj[prop] = sobj[prop];
                    }
                        return fobj;
                    }else{
                        alert("it seems that the arguments you passed are not object");
                    }
                }   

                document.getElementById("test").onclick = function (){

                    var output = "";
                    for(var i=0; i< vcan.main.repNode.length; i++){
                        output +=   vcan.main.repNode[i].mdTime;    
                        output += "<br />";

                    }

                    document.getElementById("result").innerHTML = output;

                }

            }
        </script>
    </head>

    <body>
        <div id="mycanvas">
            Please move the mouse inside this box
            And click on Show Result
        </div>

        <button id="test">
            Show Result
        </button>

        <div id="result">

        </div>
    </body>

</html>

問題を解決するには、上記のコードをブラウザにレンダリングしてください。[結果の表示]ボタンをクリックすると、時間が表示されます。私の質問は、なぜすべて同じ時間が表示されているのかということです。

時間の最新の値は、オブジェクトの配列の異なる要素にオーバーライドされます。

同時に、コンソールが表示された場合、時間は異なります。

長い間検索した後、私はこの問題を解決できませんでした。この問題を解決するのを手伝ってください。

4

3 に答える 3

2

これは固定ソリューションhttp://jsfiddle.net/WacV4/1/です。JS のオブジェクトは、値をコピーするのではなく、参照によって割り当てられるためmyObjmymousemove常に同じ値を変更します。vcan.main.currentTransform拡張する前にコピーするだけです。

于 2012-10-03T10:34:23.403 に答える
1

拡張機能をこれに置き換えるだけです

function extend(fobj, sobj) {
  if ((typeof fobj == 'object') && (typeof sobj == 'object')) {
    var newfobj = Object();
    for (var prop in fobj) {
      newfobj[prop] = fobj[prop];
    }
    for (var prop in sobj) {
      newfobj[prop] = sobj[prop];
    }
    return newfobj;
  } else {
    alert("it seems that the arguments you passed are not object");
  }
}
于 2012-10-03T10:37:47.767 に答える
0

拡張機能で何かがうまくいかない。提案された出力がどうあるべきかわかりませんが、この関数から返されるオブジェクトは常に同じ時間を持ちます。おそらく、代わりに sobj を返す必要がありますか?? ループがおそらくあなたが望むことをしていません。作成後に a を追加しましたがconsole.log(myObj);、これは毎回同じ時間が myObj に入ることを示しています。さらにヘルプが必要な場合は、希望する出力がどのように見えるかをテキストに追加することをお勧めします。

よろしくパブロ。

于 2012-10-03T10:38:51.590 に答える