覆盖 indexOf() 以调用来自 null



我知道可以像这样覆盖JS中的函数:

var indexOf = String.prototype.indexOf;
String.prototype.indexOf = function(){
//MY CODE HERE
return indexOf.call(this, arguments);
};

这是从字符串调用的覆盖indexOf()。 是否可以覆盖将从 null 调用的indexOf()var a = null; a.indexOf("foo")应该返回-1.邪恶吧?

var a = null,
b = 'foobar';
console.log( (a+'').indexOf('foo') );
console.log( (b+'').indexOf('foo') );

将 null 连接到字符串,然后检查,如果您真的想要 indexOf

null

(和undefined(不支持属性访问(点运算符(,换句话说,null.whatever永远不起作用。所以你正在寻找的东西是不可能的。参考。

此外,一些(大多数?(内置方法,包括indexOf也不支持null绑定,因此''.indexOf.call(null,...)也不起作用。

我理解您问题背后的基本原理,在"映射调用"上下文中使用空值的方法很有用,例如

source.map(x => x.someMethod())

要为源中可能发生的空值/未定义值返回一些默认值的位置。不幸的是,似乎没有办法简洁地做到这一点,您必须为可能的空值提供一个安全包装器:

source.map(x => invoke(x, func))

invoke的地方是类似于return x === null ? null : func.apply(x)

完整示例:

let isNull = x => x === null || typeof x === 'undefined';
let invoke = (func, ...args) => x => isNull(x)  ? null : func.apply(x, args);
a = ['foo', 'bar', null, 'bbaazz'];
// z = a.map(x => x.indexOf('a')) // this will fail
z = a.map(invoke(''.indexOf, 'a')); // this works
console.log(z);

相关内容

  • 没有找到相关文章

最新更新