Opened 12 years ago
Closed 12 years ago
#6992 closed enhancement (wontfix)
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 data
s 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 :-) )
Change History (3)
comment:1 Changed 12 years ago by
comment:2 Changed 12 years ago by
Component: | unfiled → data |
---|---|
Type: | bug → enhancement |
comment:3 Changed 12 years ago by
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
data
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.