+1

The typescript example of Prototype seems to have incorrect code

Himanshu il y a 3 ans mis à jour par Denis il y a 2 semaines 1

https://refactoring.guru/design-patterns/prototype/typescript/example

In the clone method of Prototype, we have the following line

clone.circularReference = { ...this.circularReference, prototype: {...this}, };

It seems to be wrong, as this is referencing a completely different temporary object. 

I think the correct code is

clone.circularReference = { ...this.circularReference, prototype: clone };

Please correct me if I am wrong. Thank you

Hi there, I think the `clone()` function needs to be updated.

public clone(): this {

// 1) Create a new empty object with the same prototype as `this`

const clone = Object.create(Object.getPrototypeOf(this) as this;

// 2) all descriptors (enumerable + non-enumerable + symbol) - just in case

const descriptors = Object.getOwnPropertyDescriptors(this);

// 3) Copy all descriptors

Object.defineProperties(clone, descriptors);

// 4) Same approach for the component

const compClone = Object.create(Object.getPrototypeOf(this.component));

const compDescriptors = Object.getOwnPropertyDescriptors(this.component);

Object.defineProperties(compClone, compDescriptors);

clone.component = compClone;

// 5) Recreate the back-reference so it points to the clone, not the original

clone.circularReference = new ComponentWithBackReference(clone);

return clone;

}