Javascript 向特定字符串添加原型函数?

Javascript 向特定字符串添加原型函数?,javascript,Javascript,我在一个类中有一个方法,它使用lodash的get,如下所示: get(path, defaultValue = '–') { const result = _.get(this, path, defaultValue); return result; } 假设result是一个字符串,是否有机会添加原型方法isDefault?我尝试了下面的实现,但它不起作用: get(path, defaultValue = '–') { const result = _.get(this, p

我在一个类中有一个方法,它使用lodash的
get
,如下所示:

get(path, defaultValue = '–') {
  const result = _.get(this, path, defaultValue);
  return result;
}
假设
result
是一个字符串,是否有机会添加原型方法
isDefault
?我尝试了下面的实现,但它不起作用:

get(path, defaultValue = '–') {
  const result = _.get(this, path, defaultValue);
  result.isDefault = () => result === defaultValue;
  return result;
}

我知道我可以将结果包装在一个类中并在其中定义方法,但我还想编写
console.log(result)
以在屏幕上打印字符串。

您的字符串是一个基本字符串,它实际上不是字符串的实例,因此您需要将结果分配包装在字符串实例中:

const result = new String(_.get(this, path, defaultValue));

注意:您并没有明确地将其添加到原型中(这会影响每个实例)。您只是试图添加一个方法作为单个实例的属性。也许这可以为您提供一些线索@Alnitak:Good point,但编写
result.prototype.isDefault
可以提供一个error@Ancinek这是因为只有
函数
对象(和类)具有
.prototype
属性,但它使
result
更难使用,就好像它是字符串原语一样。例如,
console.log(result)
不再记录简单字符串。您需要显式调用
result.toString()
@MarkMeyer您也可以使用
\uuuu proto\uuuu
赋值,但我不建议这样做,因为这是一种不好的做法:
result.\uuuu proto\uuuu.func=function(){…}我将接受它,因为它按照我预期的方式工作。也许有人能对这个解决方案有更深入的了解——明天我将对此进行一个小的研究。