问题标签 [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.
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
javascript - 使用 Object.DefineProperty 并访问私有范围内的变量
以下不起作用,从我的吸气剂中,我看不到_nickname
“类”人中的定义。
应该如何实现这一目标?有没有办法在 Person 的函数中将 _nickname 添加到 Person 的原型中?
javascript - 使用不起作用的函数声明 javascript 对象属性
我正在制作一个蹩脚的基于文本的游戏,我制作了一个像这样的对象播放器:
我的理解是你可以给一个对象一个函数作为一个属性。
但是,当alert(player.health)
我得到:
我究竟做错了什么?您不能以这种方式声明对象属性吗?有没有办法自动生成player.health
以后调用的任何时候的值?
javascript - 如何循环通过 Object.defineProperty 创建的对象属性
我的程序中有以下对象
我像这样打印出属性名称
效果很好,但是我这样声明的其他属性
不要在这里打印小提琴。
现在我输入这段代码以确保它们被定义
这给了我4
,正是我所期望的。
那么我如何遍历创建的对象的属性Object.defineProperty
呢?
也感谢对我的代码的任何其他评论和帮助。
javascript - JavaScript:在数组的 .length 上使用 defineProperty 访问器?
我希望(主要是出于学术原因)能够在数组的length
using上设置访问器Object.defineProperty()
,这样我就可以通知大小更改。
我知道 ES6 对象观察和 watch.js,但如果可能的话,我想尝试在 ES5 中执行此操作而无需额外的库,即使这仅适用于 V8/Chrome。
一个示例数组:
唉 Chrome,开箱即用,使长度不可配置:
它不起作用:
失败'TypeError: Cannot redefine property: length'
如您所见,configurable
is false
- 所以失败是可以理解的。但是根据 MDN 应该是可能的。
如何defineProperty
处理数组的length
属性?这应该工作吗?
javascript - Object.defineProperty Setter 函数的多个参数?
Object.defineProperty setter 函数是否可以有多个参数?
例如
我没有从语法中得到任何错误,但我不知道如何调用 setter 函数并将两个参数传递给它。
javascript - Javascript:原型 x defineProperty x 还有什么
对于像 Array 这样的 JS 核心对象,我有一些小而有用的额外方法:
Array.prototype.indexOfObject(属性,值)
此方法返回(对象)数组中对象的索引,其中属性==值,对我来说简单而高效。
但是,当我枚举任何数组时,该方法会出现,所以每次我必须这样做:
据我所知,defineProperty 制作了一个不可枚举的方法,因此当所有浏览器都接受它时,它将解决我的问题。顺便说一句,使用defineProperty已经安全了吗?IE9 好用吗?其它浏览器?有第三种方法吗?
javascript - Javascript拦截数组设置值
有没有办法拦截或覆盖数组设置器?例如:
所以我希望在执行第二行时调用 myInterceptor 。我希望找到一种方法来使用 Object.defineProperty()
javascript - 对输入值进行编程更改时触发操作
我的目标是观察输入值并在其值以编程方式更改时触发处理程序。我只需要现代浏览器。
我已经尝试了很多组合defineProperty
,这是我最新的迭代:
这似乎符合我的预期,但感觉就像是一种 hack,因为我正在覆盖现有的 value 属性并使用value
(属性和属性)的双重状态。它还破坏了change
似乎不喜欢修改后的属性的事件。
我的其他尝试:
- 一个 setTimeout/setInterval 循环,但这也不干净
- 各种
watch
和observe
polyfill,但它们因输入值属性而中断
什么是达到相同结果的正确方法?
现场演示:http: //jsfiddle.net/L7Emx/4/
[编辑]澄清一下:我的代码正在监视其他应用程序可以推送更新的输入元素(例如,由于 ajax 调用,或由于其他字段的更改)。我无法控制其他应用程序如何推送更新,我只是一个观察者。
[编辑 2] 为了澄清我所说的“现代浏览器”的含义,我对适用于 IE 11 和 Chrome 30 的解决方案非常满意。
[更新]根据接受的答案更新了演示:http: //jsfiddle.net/L7Emx/10/
@mohit-jain 建议的技巧是为用户交互添加第二个输入。