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

javascript - 一起使用 defineProperty get 和 value

如果我get使用defineProperty

我可以这样称呼它:document.body.parent,然后就可以了。

当我value使用defineProperty

我可以这样称呼它:document.getElementsByName("newtag").parent(2),意思是找到newtag的父节点的父节点。

但是当我把它们放在一起时,它说Uncaught TypeError: Invalid property. A property cannot both have accessors and be writable or have a value

我怎样才能做到这一点,以便我可以同时调用它,.parent& .parent(n)

没有 jQuery

0 投票
1 回答
3052 浏览

javascript - 使用 Object.DefineProperty 并访问私有范围内的变量

以下不起作用,从我的吸气剂中,我看不到_nickname“类”人中的定义。

应该如何实现这一目标?有没有办法在 Person 的函数中将 _nickname 添加到 Person 的原型中?

0 投票
3 回答
5220 浏览

javascript - 使用不起作用的函数声明 javascript 对象属性

我正在制作一个蹩脚的基于文本的游戏,我制作了一个像这样的对象播放器:

我的理解是你可以给一个对象一个函数作为一个属性。

但是,当alert(player.health)我得到:

我究竟做错了什么?您不能以这种方式声明对象属性吗?有没有办法自动生成player.health以后调用的任何时候的值?

0 投票
10 回答
119360 浏览

javascript - 如何使用javascript Object.defineProperty

我四处寻找如何使用该Object.defineProperty方法,但找不到任何像样的东西。

有人给了我这段代码

但我不明白。主要是,这get是我无法得到的(双关语)。它是如何工作的?

0 投票
1 回答
613 浏览

javascript - 如何循环通过 Object.defineProperty 创建的对象属性

我的程序中有以下对象

我像这样打印出属性名称

效果很好,但是我这样声明的其他属性

不要在这里打印小提琴

现在我输入这段代码以确保它们被定义

这给了我4,正是我所期望的。

那么我如何遍历创建的对象的属性Object.defineProperty呢?

也感谢对​​我的代码的任何其他评论和帮助。

0 投票
5 回答
4243 浏览

javascript - JavaScript:在数组的 .length 上使用 defineProperty 访问器?

我希望(主要是出于学术原因)能够在数组的lengthusing上设置访问器Object.defineProperty(),这样我就可以通知大小更改。

我知道 ES6 对象观察和 watch.js,但如果可能的话,我想尝试在 ES5 中执行此操作而无需额外的库,即使这仅适用于 V8/Chrome。

一个示例数组:

唉 Chrome,开箱即用,使长度不可配置:

它不起作用:

失败'TypeError: Cannot redefine property: length'

如您所见,configurableis false- 所以失败是可以理解的。但是根据 MDN 应该是可能的

如何defineProperty处理数组的length属性?这应该工作吗?

0 投票
3 回答
7225 浏览

javascript - Object.defineProperty Setter 函数的多个参数?

Object.defineProperty setter 函数是否可以有多个参数?

例如

我没有从语法中得到任何错误,但我不知道如何调用 setter 函数并将两个参数传递给它。

0 投票
3 回答
186 浏览

javascript - Javascript:原型 x defineProperty x 还有什么

对于像 Array 这样的 JS 核心对象,我有一些小而有用的额外方法:

Array.prototype.indexOfObject(属性,值)

此方法返回(对象)数组中对象的索引,其中属性==值,对我来说简单而高效。

但是,当我枚举任何数组时,该方法会出现,所以每次我必须这样做:

据我所知,defineProperty 制作了一个不可枚举的方法,因此当所有浏览器都接受它时,它将解决我的问题。顺便说一句,使用defineProperty已经安全了吗?IE9 好用吗?其它浏览器?有第三种方法吗?

0 投票
2 回答
1082 浏览

javascript - Javascript拦截数组设置值

有没有办法拦截或覆盖数组设置器?例如:

所以我希望在执行第二行时调用 myInterceptor 。我希望找到一种方法来使用 Object.defineProperty()

0 投票
7 回答
16538 浏览

javascript - 对输入值进行编程更改时触发操作

我的目标是观察输入值并在其值以编程方式更改时触发处理程序。我只需要现代浏览器。

我已经尝试了很多组合defineProperty,这是我最新的迭代:

这似乎符合我的预期,但感觉就像是一种 hack,因为我正在覆盖现有的 value 属性并使用value(属性和属性)的双重状态。它还破坏了change似乎不喜欢修改后的属性的事件。

我的其他尝试:

  • 一个 setTimeout/setInterval 循环,但这也不干净
  • 各种watchobservepolyfill,但它们因输入值属性而中断

什么是达到相同结果的正确方法?

现场演示:http: //jsfiddle.net/L7Emx/4/

[编辑]澄清一下:我的代码正在监视其他应用程序可以推送更新的输入元素(例如,由于 ajax 调用,或由于其他字段的更改)。我无法控制其他应用程序如何推送更新,我只是一个观察者。

[编辑 2] 为了澄清我所说的“现代浏览器”的含义,我对适用于 IE 11 和 Chrome 30 的解决方案非常满意。

[更新]根据接受的答案更新了演示:http: //jsfiddle.net/L7Emx/10/

@mohit-jain 建议的技巧是为用户交互添加第二个输入。