代码之家  ›  专栏  ›  技术社区  ›  Yordan Kanchelov

为什么这是未定义的(使用babel)

  •  0
  • Yordan Kanchelov  · 技术社区  · 8 年前

    我刚开始使用javascript,但我遇到了这个问题。。

    在本IIFE中

    (function () {
    
    this.something = "something"; // error - this is undefined 
    
    let loader = PIXI.loader;
        loader.add('ace', "assets/spritesData.json");
        loader.on('complete', onAssetsLoaded);
        loader.load();
    
    
    function onAssetsLoaded(){
        this.gameSettings = GameSettings.getInstance();
    
        createrenderer();
        let rootView = new RootView(this._stage),
            rootController = new RootController(rootView,this.gameSettings);
    
        animate();
    }
    })();
    

    为什么“这”没有定义?据我所知,现在“this”应该是函数的当前范围(在本例中是anon函数)?

    提前感谢你的帮助。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Aurelia    8 年前

    this 通常引用调用对象,但函数是匿名的,可以直接调用。以下是创建新上下文的方法:

    • new 关键字,将创建新的 上下文并返回它。

      function Constructor() { this.property = "a"; };
      let instance = new Constructor();
      // instance.property is now "a"
      
    • function.bind({}) 将包装函数,以便在调用时, 将引用 {} . function.apply 工作原理类似,但会立即调用函数并要求您也指定参数。

    • 对于高级用户: Object.create

        2
  •  1
  •   Quentin    7 年前

    详细解释见 this question .相关部分(据我所知,已接受的答案中未提及)是:

    当我们使用严格模式时, this 持有的价值 undefined 在全局函数和未绑定到任何对象的匿名函数中