這是可能,因爲你的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(/*...*/);
};
雖然,我再次「T。我倒是可以:
使用removeItem
,removeUndo
等作爲elclanrs建議。
使用items
和undos
性能,這是該項目和「撤消」 S的問題,並給他們add
和remove
方法(和它們的父對象的引用,我與上述remove
的方式。
旁註:
var myObj = new function(){
this.dateInfo = "someinfo";
};
...是一個漫長而wastef UL的方式來寫
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 | +------------------+
+-----------+
我建議你只需用'removeItem','removeUndo'等去,這會讓一切更容易。由於'this'是動態的,所以當你有很多嵌套的對象和函數時很難跟蹤它。 – elclanrs