Javascript使用其属性从访问主对象

Javascript使用其属性从访问主对象,javascript,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

我有一个目标:

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()
,我应该如何引用它?我知道
这个
不起作用(从
remove.undo()
内部)

我需要帮助。谢谢。

这是可能的,因为您的
myObj
是一个单例-只需直接使用它,您的函数将关闭
myObj
变量:

myObj.remove.undo = function(key){
    myObj.add(/*...*/);
}
还有第二种方法,它也依赖于
myObj
是一个单例(尽管可以修改为支持多个对象):

不过,我还是不愿意。我想:

  • 按照elclanrs的建议,使用
    removietem
    removeUndo

  • 使用
    items
    undos
    属性,这些属性是有问题的项和“undo”,并为它们提供
    add
    remove
    方法(以及对它们的父对象的引用,就像我在上面使用
    remove
    的方法一样)


  • 旁注:

    var myObj = new function(){
        this.dateInfo = "someinfo";
    };
    
    …是一种漫长而浪费的写作方式

    var myObj = {
        dateInfo: "someinfo"
    };
    
    第一种方法创建一个函数和一个附加对象,这两个对象都会毫无理由地扰乱内存(因为myObj通过其原型引用了这两个对象,所以JavaScript引擎必须将它们保留在内存中):

    +-----------+ |myObj| +-----------+ +-------------+ |_uuuproto_uuuu124;------+>|(对象)| |日期信息|/+--------------++------------------+ +-----------+| | | | | | | | | |-->| Object.prototype| ||构造函数|--++------------------+ | +-------------+ | | | | | +------------+ |+-->(函数)| | +------------+ || | | | | | | | | | | | | |------>(省略,不相关) ||原型|--+ | +------------+ | | | +----------------------------------------+ 第二种方法没有:

    +-----------+ | myObj | +-----------+ +------------------+ | __proto__ |--->| Object.prototype | | dateInfo | +------------------+ +-----------+ +-----------+ |myObj| +-----------+ +------------------+ |_uuproto_uuu124;-->| Object.prototype| |日期信息|+------------------+ +-----------+
    我建议您只需使用
    removietem
    removeUndo
    ,等等,这将使一切变得更容易。由于
    这个
    是动态的,当您有许多嵌套对象和函数时,很难跟踪它。 +-----------+ | myObj | +-----------+ +-------------+ | __proto__ |----+>| (object) | | dateInfo | / +-------------+ +------------------+ +-----------+ | | __proto__ |------>| Object.prototype | | | constructor |---+ +------------------+ | +-------------+ | | | | | +------------+ | +-->| (function) | | +------------+ | | __proto__ |---->(omitted, not relevant) | | prototype |--+ | +------------+ | | | +----------------------------------------+ +-----------+ | myObj | +-----------+ +------------------+ | __proto__ |--->| Object.prototype | | dateInfo | +------------------+ +-----------+