@@ -169,7 +169,7 @@ function pendingDeprecate(fn, msg, code) {
169169// Mark that a method should not be used.
170170// Returns a modified function which warns once by default.
171171// If --no-deprecation is set, then it is a no-op.
172- function deprecate ( fn , msg , code , useEmitSync ) {
172+ function deprecate ( fn , msg , code , useEmitSync , modifyPrototype = true ) {
173173 // Lazy-load to avoid a circular dependency.
174174 if ( validateString === undefined )
175175 ( { validateString } = require ( 'internal/validators' ) ) ;
@@ -192,19 +192,22 @@ function deprecate(fn, msg, code, useEmitSync) {
192192 return ReflectApply ( fn , this , args ) ;
193193 }
194194
195- // The wrapper will keep the same prototype as fn to maintain prototype chain
196- ObjectSetPrototypeOf ( deprecated , fn ) ;
197- if ( fn . prototype ) {
198- // Setting this (rather than using Object.setPrototype, as above) ensures
199- // that calling the unwrapped constructor gives an instanceof the wrapped
200- // constructor.
201- deprecated . prototype = fn . prototype ;
195+ if ( modifyPrototype ) {
196+ // The wrapper will keep the same prototype as fn to maintain prototype chain
197+ ObjectSetPrototypeOf ( deprecated , fn ) ;
198+ if ( fn . prototype ) {
199+ // Setting this (rather than using Object.setPrototype, as above) ensures
200+ // that calling the unwrapped constructor gives an instanceof the wrapped
201+ // constructor.
202+ deprecated . prototype = fn . prototype ;
203+ }
204+
205+ ObjectDefineProperty ( deprecated , 'length' , {
206+ __proto__ : null ,
207+ ...ObjectGetOwnPropertyDescriptor ( fn , 'length' ) ,
208+ } ) ;
202209 }
203210
204- ObjectDefineProperty ( deprecated , 'length' , {
205- __proto__ : null ,
206- ...ObjectGetOwnPropertyDescriptor ( fn , 'length' ) ,
207- } ) ;
208211
209212 return deprecated ;
210213}
0 commit comments