我开始了一个简单的 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);
最佳答案
听起来您要求 _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 方法。
<小时/>如果您对为什么要尝试这样做提供一些解释,我们可能会提供其他想法。
关于javascript - 使 OOP 函数参数正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19919160/