ES6调用静态方法抛出错误

时间:2018-04-03 03:14:15

标签: javascript oop ecmascript-6 es6-class

我在Javascript中有以下课程:

cart.js

class Cart{

    static addItem(data, beforeSendCallback=null, successCallback=null, errorCallback=null) {
        const emptyCallback = ()=>{}
        if(data){
            $.ajax({
                url: '/orders/',
                type: 'POST',
                data: data,
                beforeSend: beforeSendCallback == null ? emptyCallback : beforeSendCallback,
                success: successCallback == null ? emptyCallback : successCallback,
                error: errorCallback == null ? emptyCallback : errorCallback,
                dataType: 'json'
            })
        }
    }
}

现在,在我得到的另一个文件中:

item.js

...
function addItemToCart(e) {
    e.preventDefault()
    let data = {
        'itemId': $('#item_id').val(),
        'type': $('#item_type').val(),
        'quantity': $('#quantity').val(),
        'stock': $('#in_stock').val(),
        'price': $('#item_price').val()
    }

    if (data.stock != 2) {
        Cart.addItem(data, disableAddToCartBtn(true), disableAddToCartBtn(false))
    }
}
...

当按下add-cart-btn时,执行此功能但我收到错误:

  

未捕获的ReferenceError:未定义购物车,       在HTMLAnchorElement.addItemToCart(item.js:20)       在HTMLAnchorElement.dispatch(jquery.js:5206)       在HTMLAnchorElement.elemData.handle(jquery.js:5014)

这两个文件正被添加到app.js,负责通过webpack处理它们:

require('./core/cart')
require('./item')

由于我首先要求./core/cart我认为其内容可用于./item,我错了吗?

2 个答案:

答案 0 :(得分:2)

您需要在Cart中导出cart.js类,然后导入并实际分配给您要使用它的变量。在cart.js

// ....
module.exports = Cart;

然后在您要使用的任何模块中Cart

const Cart = require('./core/cart');
// use the `Cart` class.

答案 1 :(得分:2)

尝试将导入的购物车分配给变量:

const Cart = require('./core/cart');

并确保您在cart.js中导出购物车:

module.exports = class Cart {