JavaScript对象中的私有成员使用getter和setter

时间:2015-03-17 15:11:08

标签: javascript

我正在测试一个JS对象

gl.test = function () {

    var $ = jQuery;
    var _private = null;

    var _setStr = function ( t ) {
        _private = t;
    }

    var _getStr = function() {
        return _private;
    }

    var obj = {
        init: function ( str ) {
            _setStr(str);
        },

        test: function() {
            console.log( _getStr() );
        },

        EOF: null
    };

    return obj;

}();

执行以下操作时:

var test1 = gl.test;
var test2 = gl.test;

test1.init('test1');
test2.init('test2');

test1.test();
test2.test();

结果以test2 test2

返回

这是一个对象,我希望执行顺序无关紧要,并期望test1test2按以下方式返回:

var test1 = gl.test;
test1.init('test1');
test1.test();

var test2 = gl.test;
test2.init('test2');
test2.test();

我在这里做错了吗?

2 个答案:

答案 0 :(得分:1)

如评论中所述,您未实例化gl.test的新实例。您可以将其更改为不是IIFE并使用new关键字

var gl ={}
gl.test = function () {
    ....
}

var test1 = new gl.test();
var test2 = new gl.test();

实例:http://jsfiddle.net/19f9504u/

答案 1 :(得分:0)

因为test1和test2是同一个对象

//删除自动调用功能并执行gl.test

var test1 = gl.test();
var test2 = gl.test();

但是并不是说clases如何在javascript中工作