From d07a0ecac2b182b10ccac88588b421c682cda8cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Ronvel?= Date: Fri, 17 Sep 2021 20:27:33 +0200 Subject: [PATCH] wip --- lib/extend.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/extend.js b/lib/extend.js index f506e23..0c785a0 100644 --- a/lib/extend.js +++ b/lib/extend.js @@ -188,6 +188,7 @@ function extendOne( runtime , options , target , source ) { } targetPointer = target ; + console.log( "targetValue1:" , targetPointer , targetKey , targetPointer?.[ targetKey ] ) ; targetKey = runtime.prefix + sourceKey ; // Do not copy if property is a function and we don't want them @@ -212,9 +213,10 @@ function extendOne( runtime , options , target , source ) { targetKey = runtime.prefix + path[ jmax ] ; } } - + // Again, trigger an eventual getter only once - targetValue = targetPointer[ targetKey ] ; + console.log( "targetValue2:" , targetPointer , targetKey , targetPointer?.[ targetKey ] ) ; + targetValue = targetPointer?.[ targetKey ] ; targetValueIsObject = targetValue && ( typeof targetValue === 'object' || typeof targetValue === 'function' ) ; sourceValueIsObject = sourceValue && ( typeof sourceValue === 'object' || typeof sourceValue === 'function' ) ; @@ -253,7 +255,7 @@ function extendOne( runtime , options , target , source ) { } ) ; } else { - targetValue = targetPointer[ targetKey ] = runtime.references.targets[ indexOfSource ] ; + targetPointer[ targetKey ] = targetValue = runtime.references.targets[ indexOfSource ] ; } continue ; @@ -275,7 +277,7 @@ function extendOne( runtime , options , target , source ) { } ) ; } else { - targetValue = targetPointer[ targetKey ] = value ; + targetPointer[ targetKey ] = targetValue = value ; } } else if ( options.proto && Object.getPrototypeOf( targetValue ) !== sourceValueProto ) { @@ -308,7 +310,7 @@ function extendOne( runtime , options , target , source ) { } else if ( ! options.inherit ) { if ( options.descriptor ) { Object.defineProperty( targetPointer , targetKey , sourceDescriptor ) ; } - else { targetValue = targetPointer[ targetKey ] = sourceValue ; } + else { targetPointer[ targetKey ] = targetValue = sourceValue ; } } // Delete owned property of the source object