javascript - WEBPACK - 我如何需要原型(prototype)函数?

标签 javascript webpack prototype webpack-2

我最近刚刚开始将 Webpack 作为 future jQuery 插件的模块加载器,但在尝试将各个原型(prototype)函数分离到单独的文件中时遇到了问题。 Webpack 似乎将原型(prototype)函数导入到单独的 IFFE 中,这反过来又给我一个控制台错误。

我做错了什么根本性的事情吗?

示例代码:(运行 webpack 之前)

app.js

function() {


    var Cars = function(color, doors, year, make) {
        this.color = color;
        this.doors = doors;
        this.year = year;
        this.make = make;
    }

    require('./imports/module1.js');

    var Audi = new Cars("red", 5, 2001, "Audi");

    Audi.listing();    

})();

module1.js

// Module 1
console.log("Module 1");

Cars.prototype.listing = function() {
        console.log(this.year + ", " + this.color + ", " + this.make + ", with " + this.doors + " doors");
} 

WEBPACK 片段

/******/ ([
/* 0 */
/***/ (function(module, exports) {

// Module 1
console.log("Module 1");

Cars.prototype.listing = function() {
        console.log(this.year + ", " + this.color + ", " + this.make + ", with " + this.doors + " doors");
}

/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {


(function() {


    var Cars = function(color, doors, year, make) {
        this.color = color;
        this.doors = doors;
        this.year = year;
        this.make = make;
    }

    __webpack_require__(0);

    var Audi = new Cars("red", 5, 2001, "Audi");

    Audi.listing();



})();


/***/ })
/******/ ]);

控制台错误

Uncaught ReferenceError: Cars is not defined
    at Object.make.color (module1.js:4)
    at __webpack_require__ (bootstrap 91cca6f…:19)
    at app.js:12
    at Object.<anonymous> (app.js:20)
    at __webpack_require__ (bootstrap 91cca6f…:19)
    at bootstrap 91cca6f…:65
    at bootstrap 91cca6f…:65

最佳答案

代码中的一些问题:

  1. 您的module1不是一个真正的模块,它依赖于未声明的变量Car。这就是报告错误的原因。

  2. 此外,module1 尝试对 Cart 产生副作用(也就是在 Car 的原型(prototype)上添加一个属性),这不是一个好的做法。产生副作用是可以的,但最好在需要时显式设置它,而不是通过模块加载。

  3. Cars模块中,最好将require部分视为静态部分,而不是采取某种效果的方法。 (参见此引用:http://webpack.github.io/docs/code-splitting.html#es6-modules)

建议的改进和修复:

// module 1
module.exports = {
  list: function list() { /* .... */ }
}

// Cars

// require, no effect;
var module1 = require('./module1')
function Cars() {
  // code
}

// Take effect. via extending. I used underscore, you can use whatever    extending methods such as $.extend
_.extend(Cars.prototype, module1}

//....other code

实际上模块中不需要IFFE,你可以去掉它。

关于javascript - WEBPACK - 我如何需要原型(prototype)函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42468768/

相关文章:

reactjs - 当我只能在浏览器中使用 React 时,为什么要使用 create-react-app 呢?

javascript - Webpack 编号的 block 未根据配置正确加载

javascript - 构造函数中的 getter/setter

javascript - 文字渐变: cross-browser wrap text

javascript - 为什么 WMS(网络 map 服务)请求以图 block 形式返回?

javascript - Jquery Spinner 箭头未加载(可见性)

javascript - 如何跳过链中的 promise

javascript - React - 加载图像时状态错误

Javascript,从原型(prototype)函数自己的字段获取 "this"

oop - 是否可以在 Scala 中进行基于原型(prototype)的编程?