set-value-on-data-descriptor.js (1714B)
1 // Copyright (C) 2015 the V8 project authors. All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 /*--- 4 es6id: 26.1.13 5 description: > 6 Sets the new value. 7 info: | 8 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] ) 9 10 ... 11 4. If receiver is not present, then 12 a. Let receiver be target. 13 5. Return target.[[Set]](key, V, receiver). 14 15 9.1.9 [[Set]] ( P, V, Receiver) 16 17 ... 18 5. If IsDataDescriptor(ownDesc) is true, then 19 a. If ownDesc.[[Writable]] is false, return false. 20 b. If Type(Receiver) is not Object, return false. 21 c. Let existingDescriptor be Receiver.[[GetOwnProperty]](P). 22 d. ReturnIfAbrupt(existingDescriptor). 23 e. If existingDescriptor is not undefined, then 24 i. If IsAccessorDescriptor(existingDescriptor) is true, return false. 25 ii. If existingDescriptor.[[Writable]] is false, return false. 26 iii. Let valueDesc be the PropertyDescriptor{[[Value]]: V}. 27 iv. Return Receiver.[[DefineOwnProperty]](P, valueDesc). 28 f. Else Receiver does not currently have a property P, 29 i. Return CreateDataProperty(Receiver, P, V). 30 ... 31 features: [Reflect, Reflect.set] 32 ---*/ 33 34 var o1 = { 35 p: 43 36 }; 37 var result = Reflect.set(o1, 'p', 42); 38 assert.sameValue(result, true, 'returns true on a successful setting'); 39 assert.sameValue( 40 o1.p, 42, 41 'sets the new value' 42 ); 43 44 var o2 = { 45 p: 43 46 }; 47 var receiver = { 48 p: 44 49 }; 50 var result = Reflect.set(o2, 'p', 42, receiver); 51 assert.sameValue(result, true, 'returns true on a successful setting'); 52 assert.sameValue(o2.p, 43, 'with a receiver, does not set a value on target'); 53 assert.sameValue(receiver.p, 42, 'sets the new value on the receiver'); 54 55 reportCompare(0, 0);