问题标签 [defineproperty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
9780 浏览

javascript - 创建一个对外界只读的属性,但我的方法仍然可以设置

在 JavaScript (ES5+) 中,我试图实现以下场景:

  1. 一个对象(其中将有许多单独的实例),每个对象都有一个只读属性.size,可以通过直接属性读取从外部读取,但不能从外部设置。
  2. 必须从原型上的某些方法维护/更新该.size属性(并且应该保留在原型上)。
  3. 我的 API 已经由规范定义,因此我无法对其进行修改(我正在为已定义的 ES6 对象开发 polyfill)。
  4. 我主要是想防止人们意外地在脚上开枪,并且实际上并不需要防弹只读(尽管防弹越多越好),所以我愿意妥协一些只要obj.size = 3;不允许直接设置,就可以通过侧门进入物业。

我知道我可以使用在构造函数中声明的私有变量并设置一个 getter 来读取它,但是我必须将需要维护该变量的方法移出原型并在构造函数中声明它们(所以他们可以访问包含变量的闭包)。对于这种特殊情况,我宁愿不将我的方法从原型中移除,所以我正在寻找其他选项可能是什么。

可能还有什么其他想法(即使有一些妥协)?

0 投票
1 回答
115 浏览

javascript - 在 javascript 中应用 defineProperties 的用例是什么?

我对 javascript 的 ecmascript 5 方法的实际用法有一个一般性的问题。

例如

Object.defineProperties(obj, value, config)

据我所知,javascript 是前端 Web 应用程序的驱动程序。定义变量常量真的没有很多用法吗?如果您要对属性进行分类,我可以看到 enumerable 可能会派上用场。但是为什么defineProperty 这么冗长呢?

对于 getter 和 setter ......谁想要在 ecmascript 5 中隐藏这个功能,如果一些旧浏览器运行 ecma3,getter 函数甚至可能不会出现。为什么不使用普通的 getter 函数来实现相同的功能?而不是冒险行为?

0 投票
0 回答
418 浏览

javascript - IE9 JavaScript - 在 window.location 上使用 Object.defineProperty

我使用 Object.defineProperty 向对象添加属性。在 Firefox 和 Chrome 中,以这种方式向 window.location 添加属性和方法可以正常工作,但是在 IE9 中,我收到“对象不支持此操作”错误。

Object.defineProperty 似乎适用于其他事物。通过“window.location.methodName = function(){}”添加方法似乎有效。但是我想添加一个 GET 属性。

我已准备好将属性转换为方法,但是我想确保这是不可能的,因为属性在我想要的用途中更合乎逻辑。

0 投票
3 回答
1878 浏览

javascript - 在defineProperty内的getter中访问值

我可以访问我在 defineProperty 调用中定义的值吗?我想创建这样的东西:

目前我必须为每个属性创建第二个属性。

感谢您的每一个帮助!

0 投票
1 回答
82 浏览

javascript - 使用对象作为值的defineProperty

简短的问题:我可以在 defineProperty 调用中使用对象作为值吗?目前我有一个类的所有实例共享同一个对象的问题。

小例子:

一个简单的测试用例:

目前我必须以这种方式解决这个问题:

是否有可能在没有额外属性的情况下获得解决方案?

0 投票
0 回答
184 浏览

javascript - 在 Chrome 浏览器上将属性定义为数组项

数组定义元素的问题。清除所有数据后,数组中仍然存在元素,但数组长度返回0值。当尝试再次填充数组时,我们没有看到,该数组是空的。

我试图以不同的方式清除数组

但是从数组中删除最后一个元素后,数组总是有旧值......

是示例

我究竟做错了什么?

它仅在 Chrome 浏览器上发生最新版本,在其他浏览器中一切正常。

在 35.0.1916.153 m 上工作,但不在 37.0.2062.94 m 上工作。

我还在铬跟踪器中创建了一张

0 投票
1 回答
232 浏览

javascript - 有条件地调用/阻止在 Javascript 的 defineProperty 对象中调用 setter

有没有办法在 defineProperty 中捕获 Javascript 集合函数,执行一些逻辑,然后决定是否实际允许调用原始集合函数?

例子

0 投票
1 回答
3380 浏览

javascript - 对象创建定义属性设置器

我需要这样做,以便每次更改我的对象上的特定属性时 - 它都会在同一个对象上调用一个特殊方法。

例子:

如何在属性设置器中将值分配给 MyObject?

0 投票
1 回答
632 浏览

javascript - 尝试定义“删除”元素方法的 Safari javascript 错误

我的个人库中有几个定义,这个在 Safari 中生成错误:

错误:TypeError: Attempting to change enumerable attribute of unconfigurable property。

我不明白这句话的确切含义,在 FireFox 中不会发生此错误。

0 投票
1 回答
3914 浏览

javascript - 如何从 JavaScript 对象中删除 setter?

考虑以下代码:

o.y我的目标是在 setter 被调用一次后删除 setter 并使属性不可配置。但是它没有按预期工作:

所以我的代码没有按预期工作,我想不出任何其他解决方案。因此这个问题。