0

我有一个简单的 OOP 代码:

(function(window,document){
    var _data = {
        get:function(d){ return _data.data[d] },
        set:function(prop,param){ _data.data[prop]=param },
        remove:function(d){ delete _data.data[d] },
        data:{}
     }; 
     window._data = _data.hasOwnProperty() ? _data.data : _data;
})(window);

_data单独输入时想要完成的操作会返回_data.data,然后如果我这样做_data.get(...,它将执行每个属性需要执行的操作。这是怎么做到的?

或者

(function(window,document){
    var _data = {
        get:function(d){ if(!d){return _data.data } else { return _data.data[d] } },
        set:function(prop,param){ _data.data[prop]=param },
        remove:function(d){ delete _data.data[d] },
        data:{}
     }; 
     window._data = _data;
})(window);
4

1 回答 1

2

听起来您要求_data根据属性是否与它一起使用来表示两种不同的事物。你不能在javascript中做到这一点。

您可以在全局范围内执行此操作:

var _data = {
    get:function(d){ return _data.data[d] },
    set:function(prop,param){ _data.data[prop]=param },
    remove:function(d){ delete _data.data[d] },
    data:{}
 }; 

然后,_data.get()将调用该方法并返回数据。

但是,当您仅引用 时_data,您将获得_data上面的整个对象,而不仅仅是_data.data.


我能想到的唯一像你所要求的那样的事情就是做_data一个像这样的函数:

function _data() {
    return _data.data;
}

_data.get = function(d){ return _data.data[d] };
_data.set = function(prop,param){ _data.data[prop]=param };
_data.remove = function(d){ delete _data.data[d] };
_data.data = {};

这是有效的,因为函数是一个可以具有属性的对象。

然后,你可以这样做:

_data()

那会给你_data.data

或者,您可以这样做:

_data.get(x)

这将调用 get 方法。


如果您对为什么尝试这样做提供了一些解释,我们可能会提供其他想法。

于 2013-11-12T01:41:50.107 回答