Javascript:混淆对象属性访问

时间:2014-07-31 09:14:49

标签: javascript object

这是我建立的对象:

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的值吗?怎么样?

3 个答案:

答案 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"
}