我开始使用简单的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(...
它会执行每个属性需要执行的操作。这是怎么做到的?
OR
(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);
答案 0 :(得分: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方法。
如果您提供了一些解释为什么要尝试这样做的话,我们可能会提供其他想法。