Get*_*awn 0 javascript ecmascript-6
我有以下原型:
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;
}
Run Code Online (Sandbox Code Playgroud)
然后我这样称它为:
let data = [
{
id: 1
},
{
id: 2
}
];
console.log(data.find('[0].id')) // Error refers to this line
// The result should return 1
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
未捕获的TypeError:xxx不是函数
为什么它给我这个错误?
你正在调用find
一个数组.这意味着您正在使用本机数组查找方法(因为它比find
您在Object
原型上定义的方法更靠原型链).
数组find方法期望第一个参数是一个函数.
如果你想调用你的find
方法,那么你需要明确地这样做:
Object.prototype.find("xxx", data); // or
Object.prototype.find.call(data, "xxx");
Run Code Online (Sandbox Code Playgroud)
...或者给它一个未被Array.prototype上的现有方法掩盖的名称.
(这是为什么扩展原生对象的原型是一个坏主意的一个很好的例子)
归档时间: |
|
查看次数: |
311 次 |
最近记录: |