为了账号安全,请及时绑定邮箱和手机立即绑定

webpack打包后,导致js文件中的this失效,怎么解决?

webpack打包后,导致js文件中的this失效,怎么解决?

慕斯709654 2019-03-21 18:15:19
webpack打包js文件会改变里面的变量吗?这是webpack的版本问题导致的吗?求大神指导。打包之前的部分代码如下:**var page = {    data : {        date : '2018/1/1 00:00:00',          },            loadTime : function(){        var  _this = this; //这里定义了_this        var current = Date();        var seconds = (Date.parse(current)-Date.parse(_this.data.date))/1000;//在这引用了_this.data.date        timeObject.days   = Math.floor(seconds/(3600*24));        }    }打包后page里的loadtime函数变成了这样(_this不见了):loadTime: function () {      e = Date(),      n = (Date.parse(e) - Date.parse(this.data.date)) / 1000;      t.days = Math.floor(n / 86400),      }浏览器报错:
查看完整描述

3 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

这里不见的原因是打包时自动把没用的代码合并了
你这里先定义了一次 _this 然后也只使用了一次,于是自动合并成了结果那样
要达到目的的话,可能你需要一个闭包,把执行时上下文给保存下来,达到 _this 的作用

查看完整回答
反对 回复 2019-04-08
?
叮当猫咪

TA贡献1776条经验 获得超12个赞

你可以试试执行打包之前的文件,应该也存在异常,你这里的问题应该不是替不替换this;而是你的this本身就存在问题


查看完整回答
反对 回复 2019-04-08
?
皈依舞

TA贡献1851条经验 获得超3个赞

_this不见了的原因应该是@gaoryrt说的那样。

你对this的概念可能理解有误。
js中this指向的最近调用它的对象。
page看似一个对象,实际上它只是一个变量名,它的值才是对象。最近调用它的值的,外层没有对象的话一般都是window,Date.parse接收的是一个传参,还没有形成一个局部的作用域,所以你这个this指向的是window,有没有_this都没影响。


查看完整回答
反对 回复 2019-04-08
  • 3 回答
  • 0 关注
  • 844 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信