我有这个对象:

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()内部)。

我需要帮助。谢谢。

最佳答案

这是可能的,因为您的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(/*...*/);
};


再说一次,我不会。我要么:


建议使用removeItemremoveUndo等。
使用itemsundos属性(它们是有问题的项目和“撤消”的属性),并为它们提供addremove方法(以及对它们的父对象的引用,这与我上面对remove的处理方式一样) 。




边注:

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


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

var myObj = {
    dateInfo: "someinfo"
};


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

+ ----------- +
| myObj |
+ ----------- + + ------------- +
| __proto__ | ---- +> | (对象)|
| dateInfo | / + -------------- + + ------------------ +
+ ----------- + | | __proto__ | ------> | Object.prototype |
                | |构造函数| --- + + ------------------ +
                | + ------------- + |
                | |
                | | + ------------ +
                | +-> | (功能)|
                | + ------------ +
                | | __proto__ | ---->(省略,不相关)
                | |原型|-+
                | + ------------ + |
                | |
                + ---------------------------------------- +


第二种方法没有:

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

关于javascript - Javascript从其属性内访问主对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24880249/

10-11 23:23
查看更多