问题标签 [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 回答
5852 浏览

javascript - Google Chrome Object.defineProperty 中的错误行为?

我正在尝试使用 setter 和 getter 创建一个对象,这是我的代码:

var myPlayer = new Player(10);

即使writabledefineProperty 选项的属性设置为 false,我也会收到以下错误:

Invalid property. A property cannot both have accessors and be writable or have a value, #<Object>

当然,当设置为 true 时也会发生同样的情况writable,但是如果我删除该writable行,错误就会消失。

我做错了什么,还是这是一个错误?这发生在 Google Chrome 版本 30.0.1599.66

0 投票
1 回答
848 浏览

javascript - JS getters: does defineProperty replace or complement the older, inline 'get' 'set' syntax?

There seems to be an overlap in functionality between inline, object literal 'get function()' style and Object.defineProperty.

MDN docs for get https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/get don't mention that inline 'get' functions are deprecated.

This article from Mozilla's Jeff Walden in (what seems to be) 2010 stated:

"We’ve removed support for a handful of obsolete getter/setter syntaxes in SpiderMonkey and Mozilla. This does not include { get property() { return "value"; }, set property(v) { } }, which is widely used and which is part of the latest standard."

So:

  • Is inline get/set OK?
  • Is inline get/set deprecated in favor of defineProperty?
  • When should I use each?
0 投票
1 回答
8870 浏览

javascript - HTA 中的 JavaScript 版本

有谁知道 HTA 文件使用什么版本的 JavaScript。

目前正在创建一些脚本文件 - 并试图利用Object.defineProperty

当作为 HTA 运行时 - 错误指出 Object 不支持此属性或方法。我将它作为 HTM 文件运行只是为了检查 - 完全没有问题。

所以我只能假设mshta.exe使用的是较旧的 JavaScript 引擎。任何人都可以证实这一点吗?

0 投票
1 回答
104 浏览

javascript - defineProperty 方法是继承自 Object 吗?

如果所有对象都继承自 Object 那么为什么我不能以这种方式使用 Object 的 defineProperty 方法呢?

谢谢你的洞察力,

0 投票
1 回答
667 浏览

javascript - Set property within object initialisation before Object.defineProperty

I would like to set the property x when I first initialise my object, and then call Object.defineProperty. If I try to first access foo.x the console tells me that "value is not defined".

0 投票
1 回答
1830 浏览

javascript - 如何在 JavaScript 中使用 defineProperty 制作动态 getter?

我想defineProperty在 JavaScript 中定义动态 getter 函数,如下所示。为了制作只读功能,我想使用defineProperty. 这使我能够在 setter 函数中抛出异常。

但是,getter 函数将不起作用。我认为这个 getter 会obj动态返回任何属性。但事实并非如此。它总是返回obj["three"], last 属性。是否有任何方法可以制作在 JavaScript 中返回适当属性的动态 getter?

0 投票
1 回答
71 浏览

javascript - Object.create() 的奇怪行为

有人可以解释这里发生了什么:代码示例1:

代码示例 2:

Object.create 在扩展最终对象时如何设法破坏其范围?

0 投票
1 回答
534 浏览

javascript - 在定义的属性上使用 Object.defineProperty

考虑这样的模式,我们想为属性定义一个很好的 getter/setter 接口以隐藏一些内部验证:

这让我们不必担心 id,因此我们可以像这样设置“事物”:

当然,它会阻止我们将其设置为无效值:

但假设我们也希望能够从对象外部访问 ID。最自然的接口是作为事物的属性

但是,当“事物”本身就是一个 getter/setter 时,如何定义这样的属性呢?如果需要的话,我习惯于在 JS 中为任何东西添加属性——函数、数组、冰淇淋甜筒等等。但在这种情况下似乎是不可能的,至少在我能想到的任何方面都是不可能的。

当然,我可以简单地在 Constructor 对象本身上定义一个属性,例如“thingID”,或者我可以从事物 getter 中返回名称和 ID。我不是在寻找这样的解决方案,无论多么明显;这是一个关于是否实际上可以在已定义属性上定义属性的假设问题。

0 投票
2 回答
963 浏览

javascript - Javascript defineProperty 和 Object.keys 返回困境

作为先决条件,我有一个空对象,要使用 Object.properties 填充属性。定义属性。困境是我只想创建一个属性 - ["prop1"],在上面的示例中,根据 Object.keys() 返回的内容,看起来创建了 2 个属性 - ["prop1", "_prop1" ]。

问题:“prop1”的名称是什么 - 是一种属性还是一种伪属性?将 name 属性用于 "prop1" 和 "_prop1" 是否正确?

我也试过这个解决方案:

并收到此错误:“RangeError: Maximum call stack size exceeded”被触发,因为 set 在无限循环中一遍又一遍地调用相同的代码。我想知道这个“RangeError:最大调用堆栈......”问题是否有任何解决方案?(可能重复)。谢谢。

0 投票
1 回答
43 浏览

javascript - 访问对象 javascript getter 的问题

我正在动态编写getter和setter。我的代码有问题。我需要帮助来纠正它。

我的部分代码如下所示:

我的问题是在 get 函数中我想访问 tempVar 的值,但我无法访问它。

在定义它时甚至没有进入 get 函数。

并且在使用它时将进入 get 函数,但 tempVar 将仅是数组的最后一个值。

如果有人能在这方面指导我。那会很好。