javascript多个对象实例相同的时间戳

时间:2013-11-28 05:04:02

标签: javascript object instance

我很好奇为什么这会为每个返回相同的时间戳。 该对象应具有我认为的不同标识符。?

/js/helpers/v01.js

var Tester = (function () {
    var object_id = 'Tester';
    var object_id_unique = (new Date().getTime()) + '-' + (new Date().getMilliseconds());
    var _this;

    /**
     *
     * @constructor
     */
    function Tester(obj_name) {
        this.name = obj_name;
        this.run();
    }

    Tester.prototype = {

        run: function () {
            "use strict";
            var $body = document.getElementsByTagName('body')[0];
            var $node = document.createElement('div');
            $node.innerHTML = '<lable>' + this.name + ': </lable>' + ' ' + object_id + '-' + object_id_unique;
            $body.appendChild($node);
        }
    };
    return Tester;
})();

这是页面

<!DOCTYPE html>
<html lang="en">
<head>
<script type="text/javascript" src="/js/helpers/v01.js"></script>
</head>
<body>

<script type="text/javascript">
    new Tester('A');
    setTimeout(function () {
        new Tester('B');
    }, 500);
</script>
</body>
</html>

我的输出返回

A: Tester-1385613846838-838
B: Tester-1385613846838-838

2 个答案:

答案 0 :(得分:1)

在你的闭包中,你永久设置object_id_unique的值(因为函数在定义后立即被调用,而不是在你调用返回的函数时) - 在返回的内部移动功能。这应该解决它:

var Tester = (function () {
    var object_id = 'Tester';
    var _this;

    /**
     *
     * @constructor
     */
    function Tester(obj_name) {
        this.name = obj_name;
        this.run();
    }

    Tester.prototype = {

        run: function () {
            "use strict";
            var object_id_unique = (new Date().getTime()) + '-' + (new Date().getMilliseconds());
            var $body = document.getElementsByTagName('body')[0];
            var $node = document.createElement('div');
            $node.innerHTML = '<lable>' + this.name + ': </lable>' + ' ' + object_id + '-' + object_id_unique;
            $body.appendChild($node);
        }
    };
    return Tester;
})();

答案 1 :(得分:1)

在定义课程时,您只需创建object_id_unique一次。如果您希望在每个实例中它都不同,则需要在构造函数中指定它。