javascript内存模型:使用getter函数直接访问属性

时间:2016-08-26 09:57:25

标签: javascript

假设你写了一个像这样的javascript对象service

window.service = (function() {

    var list = [ 'A', 'B', 'C' ];

    return {
        list: list,

        setList: setList,
        getList: getList
    }

    function setList( l ) {
        list = l;
    }

    function getList() {
        return list;
    }

}());

有两种方法可以获得list的值,并且两者都运行良好。

// output: ["A", "B", "C"]
console.log( service.list );

// output: ["A", "B", "C"]
console.log( service.getList() );

但是,当我尝试更新list值并再次访问其值时,这样:

service.setList( [ 1, 2, 3 ] );

// output: ["A", "B", "C"]
console.log( service.list );
// output: [1, 2, 3]
console.log( service.getList() );

发生了一些奇怪的问题,我发现service.list在将新值设置为["A", "B", "C"]后仍会打印值list

我很困惑,并且不知道为什么会发生这种情况,chrome browser缓存了list的值,这是不正确的评估财产的方法吗?为什么?任何解释我在做什么(思考)错了?

java比较,代码如下:

public class Service {

    public CustomObject obj = new CustomObject("Name A");

    public static void main(String[] args) {
        Service service = new Service();
        // output: name:Name A
        System.out.println(service.obj);

        CustomObject updateObj = new CustomObject("Name B");
        // update it
        service.obj = updateObj;
        // output: name: Name B
        System.out.println(updateObj);
    }

}

public class CustomObject {

    private String name;

    public CustomObject(String name) {
        this.name = name;
    }

    public String toString() {
        System.out.println("name:" + name);
    }

}

java中,当您为reference分配新值时,它会正确更新,reference会自动指向新值。我从java获得的这种体验不适合javascript吗?

0 个答案:

没有答案