问题标签 [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 投票
1 回答
15403 浏览

javascript - 访问器属性中的错误:无法重新定义不可配置的属性“状态”

我正在尝试定义一个对象并为其创建一个访问器属性

HTML:

JavaScript:

但是当我使用它时,它会在问题标题中引发提到的错误:

抛出:

TypeError:无法重新定义不可配置的属性“模式”

这里有什么问题?

0 投票
1 回答
17208 浏览

javascript - 如何撤消 Object.defineProperty 调用?

小提琴

我在 ES5 中有哪些选项可以撤消defineProperty调用?

Object.defineProperty = function() { }没有像拜托这样的愚蠢建议。

以下Object.defineProperty(Object.prototype, 'should', {})

工作

Object.defineProperty(Object.prototype, 'should', { value: undefined })

Uncaught TypeError: Cannot redefine property: defineProperty在 V8 中抛出一个

抛出同样的错误

delete Object.prototype.should不起作用

0 投票
2 回答
2818 浏览

javascript - 将 JavaScript getter/setter 添加到本机不可配置的属性

我正在使用特殊的 getter/setter 来拦截对对象属性所做的更改,它目前适用于任何普通的用户定义属性。但是,如果我可以对内置属性(如or )采用相同的想法,我会高兴,但不幸的是,这些属性被定义为不可配置,因此在尝试使用 getter/setter 重新定义它们时出现错误。HTMLInputElement.valueArray.length

我只是想知道是否有任何一种(可靠的)hack 可以让我在不破坏其内部操作的情况下强制重新定义这些。

如果没有,我可能会被迫为所有这些简单地映射到本机属性并使用它们的替代属性定义,但这并不理想。

0 投票
1 回答
2729 浏览

javascript - 为什么我可以设置不可配置属性描述符的[可枚举性和]可写性?

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty状态:

可配置:当且仅当此属性描述符的类型可以更改并且可以从相应对象中删除该属性时才为真。默认为false.

所以,我有一个

现在我可以玩x.a = falsefor(i in x)等等。但即使描述符应该是不可配置的,我也可以

反过来,再次将它们设置为 true,或者尝试定义访问器描述符,现在会引发错误。准确地说:Object.defineProperty: invalid modification of non-configurable property.

为什么我可以“降级”描述符,尽管他们说它们是不可配置的?

0 投票
1 回答
3564 浏览

javascript - 访问使用 Object.create 创建的 JavaScript 属性的 get/set 方法

我想要的是能够包装一个 JavaScript 属性来修改 get/set 上的行为。

对于作为值的属性,我可以执行以下操作:

但是,如果myProperty已经有一个 getter/setter 怎么办?

有没有办法检测myProperty匿名设置器,以便我可以在notifyOfChange中调用它?

注意:我想让 notifyOfChange 与任何对象一起工作,因此仅对myProperty设置器使用命名函数是行不通的。

0 投票
1 回答
2507 浏览

javascript - javascript defineProperty 使属性不可枚举

我正在尝试使用 defineProperty 使属性不出现在 for...in 循环中,但它不起作用。这段代码正确吗?

0 投票
3 回答
12727 浏览

javascript - 所有浏览器的 Object.defineProperty?

询问 Object.defineProperty 如下所示:

像这样使用它的地方:

根据我目前所见,似乎没有跨浏览器解决方案,因为我尝试使用es5-shim没有运气,但我想确认一下。我还找到了对这篇文章的引用,我的测试在 IE 7 和 8 中仍然失败,任何人都可以对此有所了解吗?

我记得几个月前在 S/O 的某个地方查看了一个相关问题,我想我看到有人在答案中为此写了一个解决方案。getter / setter 的任何一般解决方法也将不胜感激。这个想法是我需要一个对象上的 getter setter 等价物,而无需通过方法传递参数更改。我不需要 IE6,但我想支持 IE7+ ff 3.6+ 等范围内的浏览器


下面的 QUnit 测试:(jsFiddles

(这些在我机器上的所有浏览器中传递,除了 IE 7 和 8

直接使用defineProperty,没有垫片:http:
//jsfiddle.net/uSYFE/

小提琴使用 ES5 垫片,我假设我需要做的就是包含它? :http:
//jsfiddle.net/hyperthalamus/ntwDy/

小提琴使用 IE 推荐的解决方案:http :
//jsfiddle.net/hyperthalamus/xfvz3/

0 投票
3 回答
18579 浏览

typescript - 如何在 TypeScript 中自定义属性

如何让 TypeScript 发出属性定义,例如:

0 投票
1 回答
174 浏览

javascript - iOS6中元素的defineProperty是否损坏?

JavaScript 的 defineProperty 和 __defineSetter 不适用于 iOS6 中的元素。它可以在所有其他浏览器和早期版本的 iOS 上正常运行。有人知道更多吗?

这是小提琴:

http://jsfiddle.net/ghenne/pnL7p/

0 投票
2 回答
6916 浏览

javascript - 有没有办法删除只读且不可配置的属性?

我认为答案是“不”,除了删除对包含对象的所有引用并允许垃圾收集最终删除包含对象的所有内容。

实时示例(使用控制台查看日志输出(在 Chrome 中按 F12 等))

代码: