Javascript:混淆对象属性访问

Javascript:混淆对象属性访问,javascript,object,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的属性。它可以访问对象栏的值吗?如何访问?不,无法访问父引用

下面是我构建的一个对象:

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的属性。它可以访问对象栏的值吗?如何访问?

不,无法访问父引用-Javascript中没有这样的概念。从Obj.foo访问Obj.bar的唯一方法是直接引用

var Obj = {
    foo: {
        foo: function () {
            return Obj.bar;
        },
        bar: "bar"
    },
    bar: "BAR"
}

您可以引入一个包含所需引用的函数范围:

var Obj = (function() {
 var that = this;
 return  {
  foo: {
    foo: function () {
     return that.bar;
    },
    bar: "bar"
  },
  bar: "BAR"
})();
我认为这应该行得通。

范围和范围 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"

非常有趣:

它可以使用Obj.barIn x.method访问它,方法中的this是x。因此,对于Obj.foo.foo,这个内部是Obj.foo,如果不使用Obj,则无法访问Obj.bar。根据英语规则,它是否可以访问并不表示任何意义。如果你想知道函数是否可以访问上面提到的值,写下它可以访问…?。@TheParamagneticCroissant,然而-每个人都知道OP的想法;你的回答不能回答这个问题。当然,从其他地方访问Obj的方法有数百万种,但对象无法获得对对象的引用,这些对象持有OP向其提供的所有者的引用。问题是“有没有方法访问所有者对象”。我解释了JS作用域。所有者在调用时被绑定。您可以使用call方法更改所有者。因此,您描述了在Obj.foo.myFunc中访问Obj.bar的一种方法。你能详细解释一下我的答案是怎么错的吗?而且作为记录,所有者的概念在Javascript中并不存在。使用Function.prototype.call会更改此函数的值。使用您的解决方案,如果将Obj.foo.foo绑定到Obj,如何访问Obj.foo.foo中的“Obj.foo.bar”这家酒吧做得很好