当前位置:  开发笔记 > 编程语言 > 正文

参数:'xxx'不是函数

如何解决《参数:'xxx'不是函数》经验,为你挑选了1个好方法。

我有以下原型:

Object.prototype.find = function (path, obj = null) {
    let previous = null;
    obj = !obj ? this : obj;
    for (let i = 0, p = path.split(/[\[\]\.]/), len = p.length; i < len; i++) {
        if (p[i] == '') { continue; }
        let item = p[i];
        obj = obj[item];
        previous = obj;
    }
    return obj;
}

然后我这样称它为:

let data = [
    {
        id: 1    
    },
    {
        id: 2
    }
];

console.log(data.find('[0].id')) // Error refers to this line
// The result should return 1

然后我收到以下错误:

未捕获的TypeError:xxx不是函数

为什么它给我这个错误?



1> Quentin..:

你正在调用find一个数组.这意味着您正在使用本机数组查找方法(因为它比find您在Object原型上定义的方法更靠原型链).

数组find方法期望第一个参数是一个函数.

如果你想调用你的find方法,那么你需要明确地这样做:

Object.prototype.find("xxx", data); // or
Object.prototype.find.call(data, "xxx");

...或者给它一个未被Array.prototype上的现有方法掩盖的名称.

(这是为什么扩展原生对象的原型是一个坏主意的一个很好的例子)

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有