Javascript 内部对象如何引用其父对象';申报时有什么东西?
JSFiddle: 有没有办法让这一切顺利进行Javascript 内部对象如何引用其父对象';申报时有什么东西?,javascript,scope,Javascript,Scope,JSFiddle: 有没有办法让这一切顺利进行 我可以将方法声明移动到methods对象内部,但这需要对我正在处理的实际代码进行重构,我只想让它正常工作) 我不认为这正是你想要的,但我发现你可以通过使用 例如: var测试={ someProperty:true, 获取某些属性引用(){ 归还此.someProperty; } }; log(test.somePropertyReference)如前所述,无法从对象文字中的嵌套对象引用父属性。 但我会建议一些模块化模式的替代方案。 以下方法使用
我可以将方法声明移动到
methods
对象内部,但这需要对我正在处理的实际代码进行重构,我只想让它正常工作) 我不认为这正是你想要的,但我发现你可以通过使用
例如:
var测试={
someProperty:true,
获取某些属性引用(){
归还此.someProperty;
}
};
log(test.somePropertyReference)代码>如前所述,无法从对象文字中的嵌套对象引用父属性。
但我会建议一些模块化模式的替代方案。
以下方法使用单个公共方法生成并返回对象someObject
,
标记为私有对象的“main”对象,该对象不能被修改,也不能被其他人访问。(现在很安全)。
方法“隐式”返回列表(对象)“main”对象的所有方法中
var someObject = (function(){
var privateObj = {
method1: function() {
console.log("method 1");
},
method2: function() {
console.log("method 2");
},
method3: function() {
console.log("method 3");
},
getMethods : function(){
var self = this;
return {
one: self.method1,
two: self.method2,
three: self.method3
};
}
};
return {
run: function(str) {
console.log("running");
privateObj.getMethods()[str]();
}
};
}());
您可以简单地重新构造它,并使用“bind”将对象构造函数中的“this”绑定到应该引用它的函数
函数someObject(){
该方法={
方法1:函数(){
console.log(this);
控制台日志(“方法1”);
},
方法2:this.method2.bind(this)
}
}
someObject.prototype.run=函数(str){
控制台日志(“运行”);
方法[str]();
}
someObject.prototype.method2=函数(){
console.log(this);
控制台日志(“方法2”);
}
var a=新的someObject();
a、 运行(“方法1”);
a、 运行(“方法2”)代码>无法从对象初始值设定项内部引用对象的属性。在对初始值设定项求值时,对象实际上并不存在。@Mike'Pomax'Kamermans-我有一个对象,它有一系列不同的“main”方法。我需要将它们放入一个key:values(key:functions)列表中,这样就可以对它们进行迭代,以便从列表中进行选择?这听起来不像是合理的责任委托,因此在本例中,我们仍然在考虑您要做什么,而不是您已经做出了哪些代码决策。“一个对象”做什么,“主要”方法做什么,为什么你需要在列表中使用它们,为什么你需要迭代它们?只要你支持IE9+;即使使用替代方法(无语法更改)定义getter和setter,也无法在早期浏览器中使用backport(polyfill)getter和setter。
var someObject = (function(){
var privateObj = {
method1: function() {
console.log("method 1");
},
method2: function() {
console.log("method 2");
},
method3: function() {
console.log("method 3");
},
getMethods : function(){
var self = this;
return {
one: self.method1,
two: self.method2,
three: self.method3
};
}
};
return {
run: function(str) {
console.log("running");
privateObj.getMethods()[str]();
}
};
}());