我正在使用带有[“iife-wrap”]插件的ES6 babel.
我正在尝试重新制作我之前创建的插件(表单验证).我试图检查数据是否是一个对象.
对于es5,这只是:typeof blah ===’object’或字符串,函数等.
但是,如果我把它放在es6上.它将产生Uncaught TypeError错误:_typeof不是函数
这是我的代码示例.
let es6function = () => { return 'asd'; } console.log(typeof es6function) class Person { } let tryThis = new Person() console.log(tryThis instanceof Person)
ES5:后期编译
; (function () { 'use strict'; function _classCallCheck(instance,Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _typeof = typeof Symbol === "function" && _typeof(Symbol.iterator) === "symbol" ? function (obj) { return typeof obj === 'undefined' ? 'undefined' : _typeof(obj); } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === 'undefined' ? 'undefined' : _typeof(obj); }; var es6function = function es6function() { return 'asd'; }; console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function)); var Person = function Person() { _classCallCheck(this,Person); }; var tryThis = new Person(); console.log(tryThis instanceof Person); })();
任何帮助,将不胜感激.谢谢.
解决方法
看起来你不小心在你的代码中经过了两次Babel.
ES6代码
console.log(typeof es6function)
确实被转化为
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function));
确实变成了
var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { return typeof obj === "undefined" ? "undefined" : _typeof2(obj); } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj); }; console.log(typeof es6function === 'undefined' ? 'undefined' : _typeof(es6function));
当你再次传播它.除了_typeof / _typeof2重复之外,这看起来很像你的转换结果.检查您的构建配置和babel插件.尝试一个接一个地禁用,以查看问题何时消失,并报告负责组件的错误.