首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hasOwnProperty未定义

hasOwnProperty未定义
EN

Stack Overflow用户
提问于 2020-06-03 06:00:01
回答 1查看 666关注 0票数 1

我正在尝试使用lodash-es包。因为它是一个ES6模块,所以Babel将其转换为Jest。

Babel配置是:

代码语言:javascript
复制
{
    "env": {
        "test": {
            "plugins": [
                "babel-plugin-rewire",
                "@babel/plugin-transform-modules-commonjs",
                "@babel/plugin-transform-runtime"
            ],
            "ignore": [
                "i18n/*.js"
            ]
        }
    }
}

但我一直在

Function.prototype.toString要求“这”是toString的一个函数

当我试图运行测试时出错。

我找到了文件,从哪里来的错误,这似乎是

Object.prototype.hasOwnPropertyundefined

我已经包含了下面代码的具体部分。

代码语言:javascript
复制
var funcProto = Function.prototype, objectProto = Object.prototype;
var funcToString = funcProto.toString;
var hasOwnProperty = objectProto.hasOwnProperty;
var reIsNative = RegExp('^' +
  // here hasOwnProperty is undefined leading to the error
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);

这是个奇怪的错误。我试着在Object.prototype.hasOwnProperty中运行node,它运行得很好。在这种情况下,我试图弄清楚它是如何评估到undefined的。

EN

回答 1

Stack Overflow用户

发布于 2020-06-03 10:30:45

经过多次调试,我发现了这个问题。

将下面的代码片段转换为

代码语言:javascript
复制
var funcProto = Function.prototype, objectProto = Object.prototype;
var funcToString = funcProto.toString;
var hasOwnProperty = objectProto.hasOwnProperty;
var reIsNative = RegExp('^' +
  // here hasOwnProperty is undefined leading to the error
  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
);

已转到以下各部分:

代码语言:javascript
复制
var funcProto = Function.prototype, objectProto = Object.prototype;
var funcToString = _get__("funcProto").toString;
var hasOwnProperty = _get__("objectProto").hasOwnProperty;
var reIsNative = RegExp('^' + _get__("funcToString").call(_get__("hasOwnProperty")).replace(_get__("reRegExpChar"), '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');

罪魁祸首是Babel如何引用其变量,但更重要的是,Lodash是如何以属性命名其变量的。

变量hasOwnProperty被引用为_get__("hasOwnProperty"),它似乎删除了类似于众所周知的对象属性的变量名。

所以,_get__("hasOwnProperty")undefined,但是,如果它是正常访问的,就像hasOwnProperty一样,它具有良好的功能。

所以,修复:

我刚把hasOwnProperty改名为hasOwnProp和宾果!啊,真灵。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62166209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档