Javascript 在字符串上定义getter

Javascript 在字符串上定义getter,javascript,node.js,string,attributes,getter-setter,Javascript,Node.js,String,Attributes,Getter Setter,我知道不能对字符串调用Object.defineProperty,但我想知道是否有一个workaround来定义字符串上的getter 换言之,我正在寻找一个能做这样事情的工人: Object.defineProperty("Some string", "prop", { get: () => { return "Some other string"; } }); 也许可以使用symboltoPrimitive 注意: 我知道你可以做一些字符串。prop=

我知道不能对字符串调用
Object.defineProperty
,但我想知道是否有一个workaround来定义字符串上的getter

换言之,我正在寻找一个能做这样事情的工人:

Object.defineProperty("Some string", "prop", {
    get: () => {
        return "Some other string";
    }
});
也许可以使用symbol
toPrimitive

注意:

我知道你可以做一些字符串。prop=“something”,但这不是我想要的,它和getter不一样。你可以在字符串。prototype上添加getter,但这是你唯一的选择。字符串值是原语;只有对象才能具有属性。如果要在字符串上显示getter,它还必须显示在所有字符串上。(如果
this!=“some value”
,您的getter可以选择不执行任何操作,但这当然适用于所有
“some value”
字符串,而不是您创建的特定字符串。)

还请注意,在严格模式代码中执行时,将抛出
“Some string”.prop=“something”
,该模式代码还包括使用
“use strict”显式标记为严格的类主体、模块和代码位于整个脚本或封闭函数的开头

JavaScript区分字符串和基本字符串 价值观

因此,您可能可以将字符串定义为字符串对象,然后

var s_obj=新字符串('one');
defineProperty(s_obj,'prop',{get:()=>'other'});

log(s_obj+':'+s_obj.prop)
充其量,这将是一个黑客攻击。你需要它做什么?很可能有一个更好的替代方案是的,但这会使s_obj的
类型返回
“object”
,而不是
“string”
是,因为s_obj实际上是对象。但是你总是可以得到原始的。很容易。