You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					34 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					34 lines
				
				1.3 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])
							 | 
						||
| 
								 | 
							
								var dP = require('./_object-dp');
							 | 
						||
| 
								 | 
							
								var gOPD = require('./_object-gopd');
							 | 
						||
| 
								 | 
							
								var getPrototypeOf = require('./_object-gpo');
							 | 
						||
| 
								 | 
							
								var has = require('./_has');
							 | 
						||
| 
								 | 
							
								var $export = require('./_export');
							 | 
						||
| 
								 | 
							
								var createDesc = require('./_property-desc');
							 | 
						||
| 
								 | 
							
								var anObject = require('./_an-object');
							 | 
						||
| 
								 | 
							
								var isObject = require('./_is-object');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function set(target, propertyKey, V /* , receiver */) {
							 | 
						||
| 
								 | 
							
								  var receiver = arguments.length < 4 ? target : arguments[3];
							 | 
						||
| 
								 | 
							
								  var ownDesc = gOPD.f(anObject(target), propertyKey);
							 | 
						||
| 
								 | 
							
								  var existingDescriptor, proto;
							 | 
						||
| 
								 | 
							
								  if (!ownDesc) {
							 | 
						||
| 
								 | 
							
								    if (isObject(proto = getPrototypeOf(target))) {
							 | 
						||
| 
								 | 
							
								      return set(proto, propertyKey, V, receiver);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    ownDesc = createDesc(0);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  if (has(ownDesc, 'value')) {
							 | 
						||
| 
								 | 
							
								    if (ownDesc.writable === false || !isObject(receiver)) return false;
							 | 
						||
| 
								 | 
							
								    if (existingDescriptor = gOPD.f(receiver, propertyKey)) {
							 | 
						||
| 
								 | 
							
								      if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;
							 | 
						||
| 
								 | 
							
								      existingDescriptor.value = V;
							 | 
						||
| 
								 | 
							
								      dP.f(receiver, propertyKey, existingDescriptor);
							 | 
						||
| 
								 | 
							
								    } else dP.f(receiver, propertyKey, createDesc(0, V));
							 | 
						||
| 
								 | 
							
								    return true;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								$export($export.S, 'Reflect', { set: set });
							 |