对象创建时javascript类id计数

对象创建时javascript类id计数,javascript,Javascript,目前这个结果是2和2,因为这两个对象都访问同一个全局变量。但是我怎么能在创建对象时拥有一个向上计数的id,这样我的id为1和2,依此类推 <script type="text/javascript"> var id =0; class theObject{ constructor(){ this.id=id++; } writeOutput(){ console.log("

目前这个结果是2和2,因为这两个对象都访问同一个全局变量。但是我怎么能在创建对象时拥有一个向上计数的id,这样我的id为1和2,依此类推

<script type="text/javascript">
    var id =0;
    class theObject{
        constructor(){
            this.id=id++;
        }
        writeOutput(){
            console.log("write output");
            $('<span>').appendTo('#output').html("id:"+id);

        }
    }

    var theObject1 = new theObject();
    var theObject2 = new theObject();

    $(document).ready(function(){

        theObject1.writeOutput();
        theObject2.writeOutput();
    })


    </script>
    <body>
    <div id="output"></div>

    </body>
    </html>
您正在writeOutput中使用全局id。相反,您希望实例属性this.id:

var-id=0; 类对象{ 建造师{ this.id=id++; } 写输出{ console.logwrite输出; $.appendTo'output'.htmlid:+this.id; } } var theObject 1=新theObject; var theObject 2=新theObject; $document.readyfunction{ 对象1.writeOutput; 对象2.writeOutput; }
你把类变量和全局变量混淆了。请注意,在构造函数中设置this.id的值,但在writeOutput中显示的是id的值,而不是this.id。id是全局变量,不是类的一部分。它旨在跟踪计数,但不是类的每个实例的存储值

要实现您的目标,您的写入输出方法应如下所示:

writeOutput()
{
    console.log("write output");
    $('<span>').appendTo('#output').html("id:"+this.id);
}

反对使用globals的投票。回答得好,@T.J。
writeOutput()
{
    console.log("write output");
    $('<span>').appendTo('#output').html("id:"+this.id);
}