我有这个对象:
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(/*...*/);
};
再说一次,我不会。我要么:
建议使用
removeItem
,removeUndo
等。使用
items
和undos
属性(它们是有问题的项目和“撤消”的属性),并为它们提供add
和remove
方法(以及对它们的父对象的引用,这与我上面对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/