我有这个对象:
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()
)。
我需要帮助。感谢。
答案 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(/*...*/);
};
但是,我不会。我要么:
使用removeItem
,removeUndo
等作为elclanrs建议。
使用items
和undos
属性作为相关项和“撤消”,并为其提供add
和remove
方法(以及参考)对于他们的父对象,我对上面remove
的方式。
旁注:
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 | +------------------+ +-----------+