这是我建立的对象:
var Obj = {
foo: {
foo: function () {
return this.bar;
},
bar: "bar"
},
bar: "BAR"
}
console.log(Obj.foo.foo());
Obj.foo.foo
方法只能访问Obj.foo.bar
属性的值或其所有者Obj.foo
的属性。它可以访问Obj.bar
的值吗?怎么样?
答案 0 :(得分:0)
您可以引入一个包含所需参考的函数范围:
var Obj = (function() {
var that = this;
return {
foo: {
foo: function () {
return that.bar;
},
bar: "bar"
},
bar: "BAR"
})();
我认为这应该有效..
答案 1 :(得分:0)
Javascript是一种有趣的语言。其中一个很酷的事情就是绑定它。
这是在函数调用中定义的。所以取决于你如何调用方法。这可以改变。你甚至可以动态改变它。给出以下对象:
var Obj = {
foo: {
myFunc: function () {
return this.bar;
},
bar: "bar"
},
bar: "BAR"
}
var Obj2 = {
foo: {
bar: "foobar"
},
bar: "FOOBAR"
}
我们可以玩得开心:
Obj.foo.myFunc(); // "bar"
但我们可以使用调用绑定不同范围的方法
Obj.foo.myFunc.call(Obj); // "BAR"
这里的Obj与此有关。
我们甚至可以绑定完全不同的对象:
Obj.foo.myFunc.call(Obj2); // "FOOBAR"
Obj.foo.myFunc.call(Obj2.foo); // "foobar"
或称之为范围:
var bar = "something completly different";
var func = Obj.foo.myFunc;
func(); // "something completly different"
非常有趣:)
答案 2 :(得分:-1)
不,没有办法访问“父”引用 - 在Javascript中没有这样的概念。从Obj.bar
访问Obj.foo
的唯一方法是直接引用。
var Obj = {
foo: {
foo: function () {
return Obj.bar;
},
bar: "bar"
},
bar: "BAR"
}