当前位置: 首页 > 面试题库 >

可以在纯JavaScript中实现只读属性吗?

温智明
2023-03-14
问题内容

查看mozilla文档,查看正则表达式示例(标题为“使用匹配结果创建数组”),我们有如下语句:

输入:一个只读属性,它反映与正则表达式匹配的原始字符串。

index:只读属性,它是字符串中匹配项的从零开始的索引。

等等…是否可以在JavaScript中创建具有只读属性的对象,或者这是对特定浏览器实现的内置类型的特权?


问题答案:

编辑: 自从编写了此答案以来Object.defineProperty,EcmaScript
5中已经标准化了一种新的更好的使用方式,并在较新的浏览器中提供了支持。如果需要支持“较旧的”浏览器,则可以使用此答案中的一种方法作为备用。

在Firefox,Opera 9.5+和Safari3+,Chrome和IE(已通过v11测试)中,您可以定义getter和setter属性。如果仅定义一个吸气剂,它将有效地创建一个只读属性。您可以使用对象文字或在对象上调用方法来定义它们。

var myObject = {
    get readOnlyProperty() { return 42; }
};

alert(myObject.readOnlyProperty); // 42
myObject.readOnlyProperty = 5;    // Assignment is allowed, but doesn't do anything
alert(myObject.readOnlyProperty); // 42

如果已经有一个对象,则可以调用__defineGetter____defineSetter__

var myObject = {};
myObject.__defineGetter__("readOnlyProperty", function() { return 42; });

当然,这在网络上并没有真正的用处,因为它在Internet Explorer中不起作用。



 类似资料:
  • 我想定义一个具有只读属性的接口。例如; 但是,这会在栏上出现语法错误“预期';'”。我已将VisualStudio设置为使用ES5目标,因此支持getter。这是接口的限制吗?将来可能会发生这种变化;能够做到这一点是一件非常好的事情。

  • 问题内容: 鉴于Python的动态性,如果无法实现,我会感到震惊: 我想更改的实现。 我试图简单地写成这样: 但这告诉我。 这是防止我做可能(可能)愚蠢的事情的好尝试,但是我真的很想继续做下去。我怀疑解释器有某种可以修改的查找表,但我在Google上找不到类似的表。也不起作用- 它返回了与只读属性完全相同的错误。 我很想寻找一个Python 2.7解决方案,如果那很重要的话,尽管没有理由拒绝抛出适

  • 问题内容: 我不知道何时属性应该是私有的,是否应该使用属性。 我最近读到,setter和getters不是pythonic,我应该使用属性装饰器。没关系。 但是,如果我有属性,那一定不能从类外部设置,而是可以读取的(只读属性)。这个属性应该是私有的吗?我所说的私有是指下划线吗?如果是,那么不使用getter怎么读?我现在知道的唯一方法是写 这样我就可以读取属性,但是我无法设置它,所以很好。 但是我

  • 问题内容: 我需要使用Java中的Selenium WebDriver 编辑一些字段。由于Selenium甚至不允许我找到该字段,因此我搜索了解决方案,发现最简单的方法可能是使用带有JavaScript Executor 的JavaScript代码段删除属性。 尽管此代码段可从Firefox控制台运行,但已成功从所有输入中删除了该属性,但在Selenium中引发了异常。 JavaScript执行器

  • 我有很多人和相关团队。我想显示记录中的所有人,但我只想显示他们的队名一次。 这意味着,如果 v-for 循环遇到了这个特定的团队名称,它应该把它放在一个新的临时数组中,以表示它应该是唯一的,然后当它再次遇到该团队名称时,通过该临时数组检查它并防止它再次显示。 示例 HTML 代码: 示例Vue代码: 预期输出: 这是否可以直接从 v-for 循环而不是在 JS 文件中完成? 已编辑以显示更多非顺序

  • 问题内容: 我想要具有不同状态的实体(控件或属性),可以通过CSS对其进行着色。 例如,以TextField为例,它可以包含两种值,正常值和错误值。一旦包含错误值,则应显示为“红色”。但是实际颜色应该可以从CSS定义。 这可能实现吗? 我发现了很多接口或类,但是它们看起来可以接受任何样式。 我可以编写和实体,从价值中衍生出风格吗? 问题答案: 您可以使用: 用这样的CSS: 虽然老实说,我不能完全