Oliver Hunt wrote:
My reading of [[CanPut]] implies that it only checks a single level of the 
prototype chain.  This seems incorrect to me but I thought I'd check whether it 
is in fact intentional, or whether it's a spec bug.

See step 4 and later.

/be

ES5.1 8.12.4 [[CanPut]] (P)

When the [[CanPut]] internal method of O is called with property name P, the following steps are taken:

1. Let desc be the result of calling the [[GetOwnProperty]] internal method of O with argument P.
2. If desc is not undefined, then
 a. If IsAccessorDescriptor(desc) is true, then
  i. If desc.[[Set]] is undefined, then return false.
  ii. Else return true.
b. Else, desc must be a DataDescriptor so return the value of desc.[[Writable]].
3. Let proto be the [[Prototype]] internal property of O.
4. If proto is null, then return the value of the [[Extensible]] internal property of O. 5. Let inherited be the result of calling the [[GetProperty]] internal method of proto with property name P. 6. If inherited is undefined, return the value of the [[Extensible]] internal property of O.
7. If IsAccessorDescriptor(inherited) is true, then
 a. If inherited.[[Set]] is undefined, then return false.
 b. Else return true.
8. Else, inherited must be a DataDescriptor
 a. If the [[Extensible]] internal property of O is false, return false.
 b. Else return the value of inherited.[[Writable]].

Host objects may define additional constraints upon [[Put]] operations. If possible, host objects should not allow [[Put]] operations in situations where this definition of [[CanPut]] returns false.
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to