|
|
|
The abstract operation OrdinarySet takes arguments ). It performs the following steps when called: 1. : P ) is true . 2. Let ownDesc be ? O .[[GetOwnProperty]]( P ). 3. Return O , P , V , Receiver , ownDesc ). The abstract operation OrdinarySetWithOwnDescriptor takes arguments O (an Object), P (a property key), V (an ), Receiver ), and ownDesc (a or undefined ). It performs the following steps when called: 1. : P ) is true . 2. If ownDesc is undefined , then a. Let parent be ? O .[[GetPrototypeOf]](). b. If parent is not null , then i. Return ? parent .[[Set]]( P , V , Receiver ). c. Else, i. Set ownDesc to the PropertyDescriptor { [[Value]]: undefined , [[Writable]]: true , [[Enumerable]]: true , [[Configurable]]: true }. 3. If ownDesc ) is true , then a. If ownDesc .[[Writable]] is false , return false . b. If ( Receiver ) is not Object, return false . c. Let existingDescriptor be ? Receiver .[[GetOwnProperty]]( P ). d. If existingDescriptor is not undefined , then i. If ( existingDescriptor ) is true , return false . ii. If existingDescriptor .[[Writable]] is false , return false . iii. Let valueDesc be the PropertyDescriptor { [[Value]]: V }. iv. Return ? Receiver .[[DefineOwnProperty]]( P , valueDesc ). e. Else, i. : Receiver does not currently have a property P . ii. Return ? ( Receiver , P , V ). 4. : ( ownDesc ) is true . 5. Let setter be ownDesc .[[Set]]. 6. If setter is undefined , return false . 7. Perform ? ( setter , Receiver , « V »). 8. Return true . The [[Delete]] internal method of an O takes argument P (a property key). It performs the following steps when called: 1. Return ? ( O , P ). 10.1.9.1 OrdinarySet ( O , P , V , Receiver ) 10.1.9.2 OrdinarySetWithOwnDescriptor ( O , P , V , Receiver , ownDesc ) 10.1.10 [[Delete]] ( P ) 10.1.10.1 OrdinaryDelete ( O , P ) 227 |