javascript - 在javascript中内部对象文字之间使用函数

标签 javascript

我的问题是我的 js 类中有 2 个内部对象,我试图在我的另一个对象中使用这些对象之一的方法(下面是我尝试做的示例)。我明白为什么这因为范围而不起作用。我只是想知道是否有办法让它发挥作用。

var Class1 = {

    self : this,
    Obj1 : {

        Obj1Method : function () {
            alert("Do something");
        },
        Obj1Method2 : function () {
            alert("Do something else");
        },

        InnerObj1 : {
            InnerNestObj1Method : function (val) {
                alert(val + 2);
            }
        }
    },

    Class1Method2 : function () {
        this.Obj1.Obj1Method2();
    },

    Obj2 : {

        Obj2Method : function (val2) {
            self.Obj1.InnerObj1.InnerNestObj1Method(val2);
        },

        Obj2Method2 : function () {
            self.Class1Method2();
        }
    }
};

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //No bueno
Class1.Obj2.Obj2Method(5); //No bueno

最佳答案

您可以通过将 self 替换为 Class1 来修复您的示例。 self : this, 行将 Class1.self 设置为指向全局对象(评估该行时为 this )。

var Class1 = {

    self : this,
    Obj1 : {

        Obj1Method : function () {
            alert("Do something");
        },
        Obj1Method2 : function () {
            alert("Do something else");
        },

        InnerObj1 : {
            InnerNestObj1Method : function (val) {
                alert(val + 2);
            }
        }
    },

    Class1Method2 : function () {
        this.Obj1.Obj1Method2();
    },

    Obj2 : {

        Obj2Method : function (val2) {
            Class1.Obj1.InnerObj1.InnerNestObj1Method(val2);
        },

        Obj2Method2 : function () {
            Class1.Class1Method2();
        }
    }
};

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //bueno
Class1.Obj2.Obj2Method(5); //bueno

当你执行 self: this 时会发生什么

// If this is running in non strict mode, from the global scope, `this` points
// To the global object because there was no function call setting `this`
var Class1 = {
    self : this,
};

您需要了解的是,this 是由使用this 调用该函数的任何人设置的。在上面的示例中,没有调用者,因此运行时将 this 设置为指向全局对象。

以下是如何使您的对象更可重用并为您自己提供对外部对象的引用:

function createClass() {
  var self = {
    Obj1: {

      Obj1Method: function() {
        alert("Do something");
      },
      Obj1Method2: function() {
        alert("Do something else");
      },

      InnerObj1: {
        InnerNestObj1Method: function(val) {
          alert(val + 2);
        }
      }
    },

    Class1Method2: function() {
      self.Obj1.Obj1Method2();
    },

    Obj2: {

      Obj2Method: function(val2) {
        self.Obj1.InnerObj1.InnerNestObj1Method(val2);
      },

      Obj2Method2: function() {
        self.Class1Method2();
      }
    }
  };
  return self;
}

var Class1 = createClass();

Class1.Obj1.InnerObj1.InnerNestObj1Method(3); //works
Class1.Class1Method2(); //works
Class1.Obj2.Obj2Method2(); //works
Class1.Obj2.Obj2Method(5); //works

关于javascript - 在javascript中内部对象文字之间使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34400203/

相关文章:

javascript - 从对象数组中获取特定数据并转换为对象

javascript - Pixi.js 绘制下落的方 block

javascript - 动态 HTML 行,其中列表项与动态行级联

javascript - 创建一个每次选择正确答案都会上升的分数

javascript - 按值和字母表对数组进行排序 React Native

javascript - 如何更改通过滚动激活的选项卡元素样式?

javascript - jQuery width, outerWidth, innerWidth - 返回假值

javascript - 如何构建一个简单的 Safari 10.1 应用扩展以在 Safari 启动时注入(inject) JavaScript 代码?

javascript - 如何使用 JavaScript 在输入字段中输入值?

JavaScript、React - 发送多个同时的 ajax 调用