构造函数this指向

图片描述
在往上查到构造函数因为没有创建新的对象所有其中this指向的是window对象,
但是我在使用es6的模块加载export default引用一个构造方法的时候
在执行过程中在页面打断点提示的this表示undefined如下图

但是相同的文件 不用使用es6的模块引用 直接用cdn引用的时候就没有问题,this的确表示window对象 我很费解这个问题 如果有大神知道原理请给我解惑 谢谢
图片描述

阅读 2.3k
2 个回答

1.严格模式下, 函数当做普通函数调用的时候 this 是指向 undefined

以对于一个开启严格模式的函数,指定的this不再被封装为对象,而且如果没有指定this的话它值是undefined
参考: 严格模式

2: 当使用了 es6 的 modules 的时候会自动开启严格模式, 而不用显示声明. 如果是用一些打包工具的话, 你会看到打包出来的 JS 前面加了 'use strict';
参考:ES6 modules

先看普通函数

var a='全局变量';//全局变量
function puTongFun(){//我的体育老师说,普通函数名不要全大写
    console.log(a);//输出 全局变量
    console.log(this);// 输出Window
}
puTongFun();调用

再看构造函数(字面量)

var a='全局变量';//
var obj={//es6的模板其实就是封装了一个对象,里面的this当然是指向对象,而不是window
    a:'局部变量',
    fun:function(){
        console.log(this.a);//局部变量
    }
}
obj.fun()

再看看一些观点就更明了了
ES6的Class只是面向对象编程的语法糖,升级了ES5的构造函数的原型链继承的写法,并没有解决模块化问题。Module功能就是为了解决这个问题而提出的。也就是说module是对面向对象的构造函数进行了封装

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题