W dużym projekcie występuje często spotykany problem. Mianowicie, gdy
funkcję traktujemy jako konstruktor obiektu, a nie powinniśmy i przed
wywołaniem funkcji dopisaliśmy operator new
.
Co wtedy? Jak zachowa się aplikacja? Jak to sprawdzić? Jak zapobiec?
Jeżeli pattern użyty w aplikacji korzysta z kontekstu to sytuacja może się skomplikować. Ciało funkcji, w którym jest odniesienie się do aktualnego kontekstu będzie różny w zależności w jaki sposób skorzystamy z definicji funkcji.
Jeśli wywołamy funkcję w globalnym scope'ie to this
odnosi się
do obiektu globalnego Window
. Jeśli jednak przez pomyłkę, bądź
specjalnie użyjemy przed wywołaniem funkcji operatora new
to
this
będzie referencją do obiektu, który właśnie powstał.
Przykład cross-platform-owej implementacji: