Side navigation
#6992 closed enhancement (wontfix)
Opened September 02, 2010 08:46PM UTC
Closed October 03, 2010 02:57AM UTC
data() can be used as data[]
| Reported by: | marian | Owned by: | |
|---|---|---|---|
| Priority: | undecided | Milestone: | 1.4.3 |
| Component: | data | Version: | 1.4.2 |
| Keywords: | Cc: | ||
| Blocked by: | Blocking: |
Description
I've noticed a strange behavior (I don't want to say it's a bug):
Normally, you use data this way:
>>> $('body').data('foo', 'bar')
[body.jq-enhanced]
>>> $('body').data('foo')
"bar"
>>> $('body > div').data('foo')
null
– everything's fine, other elements are not affected.
However if one uses it as follows, which is not that digressive IMHO (at least it was how I used it without thinking about it), everything seems also fine: …
>>> $('body').data['foo'] = 'bar'
"bar"
>>> $('body').data['foo']
"bar"
… until here:
>>> $('body > div').data['foo']
"bar"
As I said, I know this is not a bug, and I understand where the behavior comes from – all
datas of all elements are the same object, and, well,
[]does write on the object directly.
But nonetheless, I want to ask whether something can be done here to avoid this mistake, which is somehow self-evident and, I assume, made often. (It took me a looong time to find out that this was the reason :-) )
Attachments (0)
Change History (3)
Changed September 03, 2010 12:30AM UTC by comment:1
Changed September 03, 2010 12:31AM UTC by comment:2
| component: | unfiled → data |
|---|---|
| type: | bug → enhancement |
Changed October 03, 2010 02:57AM UTC by comment:3
| priority: | → undecided |
|---|---|
| resolution: | → wontfix |
| status: | new → closed |
No way we can fix this, unfortunately.
I'm not sure how we could prevent this. You're assigning values to properties of the
method. People have made similar mistakes like$("body").innerHTML = "hello""that are also pretty difficult to detect. Ecmascript 5 will have the ability to seal objects to prevent new properties/methods from being assigned, but for now with existing browsers I don't see a solution.