我知道你不能在字符串上调用Object.defineProperty
但是我想知道是否有一个workarround来定义字符串上的getter?
换句话说,我正在寻找能够做到这样的事情的工作场所:
Object.defineProperty("Some string", "prop", {
get: () => {
return "Some other string";
}
});
也许可以使用符号toPrimitive
?
注意:
我知道你可以做"Some string".prop = "something"
但这不是我想要的,它与吸气剂不一样
答案 0 :(得分:2)
您可以在String.prototype
上添加一个getter,但这是您唯一的选择。字符串值是原语;只有对象才能拥有属性。如果你想在字符串上使用getter,它也必须出现在所有字符串上。 (如果this != "some value"
,您的getter可以选择不执行任何操作,但这当然适用于"some value"
的所有字符串,而不是您创建的某些特定字符串。)
另请注意,"Some string".prop = "something"
将在严格模式代码中执行,该代码还包括在整个脚本开头使用"use strict";
显式标记为严格的类主体,模块和代码或封闭功能
答案 1 :(得分:1)
JavaScript区分String objects和原始字符串 值。
所以你可能可以将字符串定义为String对象并且......
var s_obj = new String('one');
Object.defineProperty(s_obj, 'prop', {get: () => 'another'});
console.log(s_obj + ' : ' + s_obj.prop)
希望它有所帮助。