猿问

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

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),

      }

浏览器报错:

慕斯709654
浏览 845回答 3
3回答

慕桂英546537

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

叮当猫咪

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

皈依舞

_this不见了的原因应该是@gaoryrt说的那样。你对this的概念可能理解有误。js中this指向的最近调用它的对象。page看似一个对象,实际上它只是一个变量名,它的值才是对象。最近调用它的值的,外层没有对象的话一般都是window,Date.parse接收的是一个传参,还没有形成一个局部的作用域,所以你这个this指向的是window,有没有_this都没影响。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答