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";
}
});
也许可以使用symboltoPrimitive
注意:我知道你可以做一些字符串。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实际上是对象。但是你总是可以得到原始的。很容易。