内部对象如何在声明时引用其父对象的对象
How can an inner object reference its parent's objects at declaration?
JSFiddle: https://jsfiddle.net/dyncmuks/1/
var someObject = {
run: function(str) {
console.log("running");
this.methods[str]();
},
method1: function() {
console.log("method 1");
},
method2: function() {
console.log("method 2");
},
methods: {
one: this.method1, //This == the 'methods' object
two: this.method2 //I want to refer to the 'someObject' object
}
};
有没有办法做到这一点?
我可以将方法声明移动到methods
对象内部,但这需要对我正在处理的实际代码进行一些重构,我只想让它工作(。
如前所述,无法从对象文本中的嵌套对象引用父属性。
但我会建议一些模块化模式的替代方案。以下方法使用单个公共方法 run
生成并返回对象someObject
。
标记为私有对象的"主"对象,无法修改或被某人访问。(现在很安全(。
getMethods
方法"隐式"返回"主"对象的所有方法的列表(对象(。
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]();
}
};
}());
https://jsfiddle.net/xnbe510b/
你可以简单地重组一下,并使用"bind"将对象构造函数中的"this"绑定到应该引用它的函数。
function someObject() {
this.methods = {
method1: function() {
console.log(this);
console.log("method 1");
},
method2: this.method2.bind(this)
}
}
someObject.prototype.run = function(str) {
console.log("running");
this.methods[str]();
}
someObject.prototype.method2 = function() {
console.log(this);
console.log("method 2");
}
var a = new someObject();
a.run("method1");
a.run("method2");
我不
认为这是否正是您要找的,但我发现您可以使用getters来实现它。
例如:
var test = {
someProperty: true,
get somePropertyReference() {
return this.someProperty;
}
};
console.log(test.somePropertyReference);
相关文章:
- 如何使用object.assign()从其他对象引用基本对象属性
- 返回 JavaScript 类值而不是对象引用
- Facebook:当发布期望对象引用时显示打开的图形对话框
- Javascript-如何从字符串/对象引用回调
- 将其用于对象引用
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- Javascript:将类/对象引用设置为 NULL,内存中的子对象/类会发生什么
- 在 Jquery 中,我可以存储对象引用并在以后使用它吗?
- 将对象函数传递给请求动画帧时丢失对象引用
- JavaScript ecma6中的对象引用
- 在JSON中存储对象引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- 对象引用的隐式传递是如何工作的
- 按对象的 ID 删除对选定对象的对象引用
- 在调用的函数中使用对象引用(this)
- 如何在testcomplete+js中获取对象引用
- 在Angularjs服务中为返回对象引用的http请求提供的数据构建简单的缓存
- JavaScript对象引用
- 对象引用未设置为行中的对象的实例,如果 (!string.IsNullOrEmpty(tdcd.文本)&&
- 如何在使用声明式 Dojo 时获取对象引用