Javascript从其属性中访问主对象

时间:2014-07-22 06:22:11

标签: javascript

我有这个对象:

var myObj = new function(){
   this.dateInfo = "someinfo";
} 

然后我有以下属性:

myObj.add = function(){
    console.log("Added");
}
 myObj.remove.item = function(key){
  console.log("Item "+key+" removed.");
}

问题在于:

myObj.remove.undo = function(key){
    // here I want to use `myObj.add()` function, what should I do?
}

在上面的(最后一个)函数中,我想使用myObj.add(),我该如何引用它?我知道this没有做到这一点(来自remove.undo())。

我需要帮助。感谢。

1 个答案:

答案 0 :(得分:2)

这是可能的,因为您的myObj是单身人士 - 只需直接使用它,您的功能就会关闭myObj变量:

myObj.remove.undo = function(key){
    myObj.add(/*...*/);
}

这是第二种方式,它也依赖myObj作为单身(尽管可以修改它以支持多个对象):

myObj.add = function(){
    console.log("Added");
};

myObj.remove = {
    parent: myObj
};

myObj.remove.item = function(key){
  console.log("Item "+key+" removed.");
};

myObj.remove.undo = function(key){
    this.parent.add(/*...*/);
};

但是,我不会。我要么:

  1. 使用removeItemremoveUndo等作为elclanrs建议。

  2. 使用itemsundos属性作为相关项和“撤消”,并为其提供addremove方法(以及参考)对于他们的父对象,我对上面remove的方式。


  3. 旁注:

    var myObj = new function(){
        this.dateInfo = "someinfo";
    };
    

    ......写作是一种漫长而浪费的方式

    var myObj = {
        dateInfo: "someinfo"
    };
    

    第一种方法创建了一个函数和一个额外的对象,这两个对象都没有充分的理由使得内存混乱(因为myObj通过它的原型引用它们,因此JavaScript引擎必须将它们保存在内存中):

    +-----------+  
    |   myObj   |  
    +-----------+      +-------------+
    | __proto__ |----+>|  (object)   |
    | dateInfo  |   /  +-------------+       +------------------+
    +-----------+   |  | __proto__   |------>| Object.prototype |
                    |  | constructor |---+   +------------------+
                    |  +-------------+   |
                    |                    |
                    |                    |   +------------+
                    |                    +-->| (function) |
                    |                        +------------+
                    |                        | __proto__  |---->(omitted, not relevant)
                    |                        | prototype  |--+
                    |                        +------------+  |
                    |                                        |
                    +----------------------------------------+
    

    第二种方式不是:

    +-----------+
    |   myObj   |
    +-----------+    +------------------+
    | __proto__ |--->| Object.prototype |
    | dateInfo  |    +------------------+
    +-----------+