在字符串上定义getter

时间:2018-02-17 23:12:18

标签: javascript node.js string attributes getter-setter

我知道你不能在字符串上调用Object.defineProperty但是我想知道是否有一个workarround来定义字符串上的getter?

换句话说,我正在寻找能够做到这样的事情的工作场所:

Object.defineProperty("Some string", "prop", {
    get: () => {
        return "Some other string";
    }
});

也许可以使用符号toPrimitive

注意:
我知道你可以做"Some string".prop = "something"但这不是我想要的,它与吸气剂不一样

2 个答案:

答案 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)

希望它有所帮助。