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

时间:2016-09-02 16:31:50

标签: javascript babel

我是一个新的使用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();
}
})();

为什么“这个”未定义?从我所知到现在“这个”现在这应该是函数的当前范围(在这种情况下是anon函数)?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

可以在this question中找到详细解释。相关部分(据我所知,在接受的答案中没有提到)是:

  

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

答案 1 :(得分:1)

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

  • new关键字会创建一个新的this关联并返回。

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

  • 对于高级用户:Object.create