javascript - 使 OOP 函数参数正常工作

标签 javascript oop hasownproperty

我开始了一个简单的 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/

相关文章:

java - 声明类属性 protected 还是公开?

javascript - if (obj.nonExistent Property) 是否触发任何浏览器错误?

javascript - 是否有一个等于 hasOwnProperty() 的方法可以遍历原型(prototype)链?

typescript :object.hasOwnProperty() 在继承属性上显示为真。为什么?

javascript - ExtJs 4,有没有办法找到控件? (不是 "id")

javascript - 使用 Express 保存 POST 请求的数据

javascript - 我可以将特定驱动器(例如 ,"D:\")设置为 showOpenFilePicker 的默认目录吗?

javascript - for in 循环在 javascript 中行为异常

java - 为什么我无法在 Java 中访问这个创建的对象?

ruby - 当父类的方法访问子类的常量时怪癖