2012/12/1 Allen Wirfs-Brock <al...@wirfs-brock.com> > Requirements: > 1) In ES6 property keys are no longer limited to string values, we now > also have keys that are Symbols. > 2) Some meta-programming tasks will requires a way to reflectively obtain > a list of all public property keys. > 3) The existing reflection APIs for property keys > (Object.getOwnPropertyNames and Object.keys) only return string values and > we don't want to break existing clients of those functions by returning > non-string values. > > Solution: > 1) Object.getOwnPropertyNames and Object.keys remain unchanged. They only > return a string property key values. > 2) Reflect.ownKeys(obj) is a new reflection function that returns an > iterator. The iterator produces the keys of all public own properties of > the object pass as an argument. This includes both string and Symbol key > values. A property whose key is a private Symbol is not a public property > and its key is not returned by the ownKeys iterator. > 3) The [[OwnPropertyKeys]] internal method is defined to return an > iterator with the same definition as used for Reflect.ownKeys. > (Reflect.ownKeys is implemented as a call to this internal method). > [[OwnPropertyKeys]] replaces the like-named internal method in the current > spec. draft and also replaces the [[GetOwnPropertyNames]] internal method > used in the wiki Proxy proposals. > 4) ownKeys is the corresponding Proxy trap. The getOwnPropertyNames trap > is removed. > 5) Object.keys and Object.getOwnPropertyNames are respecified in terms of > [[OwnPropertyKeys]]. They internally drain the iterator and continue to > return arrays of strings. > > Any objections? >
Sounds good. We probably still need to clear up the discussion on invariants for [[OwnPropertyKeys]] on a non-extensible proxy. I don't remember if we reached a consensus on that. Cheers, Tom
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss