使用对象属性而不在Javascript

时间:2017-03-24 10:58:51

标签: javascript

以下脚本是一个简单的类注册脚本。我不想在全局窗口对象上存储类,但我仍然想让new MyClass2();工作。如果我能够将obj变量定义为window之类的全局对象,那么以下代码应该可以正常工作。

因此obj对象上的每个属性都应该在defineClass函数范围内作为变量使用。

是否有可能或者我应该使用注释代码进行堆叠?



(function() {
  var obj = {};
  window.defineClass = function(className, cb) {
    obj[className] = cb.call(obj /*, obj*/ );
  }
  window.start = function() {
    new obj.MyClass();
  }
})();

defineClass('MyClass', function( /*obj*/ ) {
  function MyClass() {
    this.obj = new MyClass2();
    //this.obj = new obj.MyClass2();
  }

  window.MyClass = MyClass;

  return MyClass;
});

defineClass('MyClass2', function( /*obj*/ ) {
  function MyClass2() {
    console.log('MyClass2');
  }

  return MyClass2;
});

start()




1 个答案:

答案 0 :(得分:0)

如果您希望符号new MyClass2()起作用,请在全局范围或闭包中定义function MyClass2(){},例如:

defineClass('MyClass', function() {
    function MyClass() {
      this.obj = new MyClass2();
    }

    window.MyClass = MyClass;

    return MyClass;

    function MyClass2(){}
});

window是一个特殊的全局对象,window.window本身就是window

使用模块加载器对于这类问题非常方便,例如。 requirejsES6 import

使用iframe是另一种可能的解决方案。