From 2c618b52785ae1fde7ad9c807a4625efcd8255e5 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Fri, 20 Jun 2025 16:24:57 -0700 Subject: [PATCH 1/2] Add Classic Classes Deprecation Guide --- .../v6/deprecate-classic-class-syntax.md | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 content/ember/v6/deprecate-classic-class-syntax.md diff --git a/content/ember/v6/deprecate-classic-class-syntax.md b/content/ember/v6/deprecate-classic-class-syntax.md new file mode 100644 index 00000000..191858c5 --- /dev/null +++ b/content/ember/v6/deprecate-classic-class-syntax.md @@ -0,0 +1,81 @@ +--- +title: "Deprecation: Classic Class Syntax" +until: 7.0.0 +since: 6.5.0 +--- + +With the introduction of native class syntax in JavaScript, Ember is deprecating its classic class syntax, which includes `extend`, `reopen`, and `reopenClass`. This guide will help you migrate your code to the modern syntax. + +### `extend` + +The `extend` method was used to create a new class that inherited from a parent class. This can be replaced with the `class` and `extends` keywords in native JavaScript. + +**Before:** + +```javascript +import EmberObject from '@ember/object'; + +const MyComponent = EmberObject.extend({ + // ... +}); +``` + +**After:** + +```javascript +import EmberObject from '@ember/object'; + +class MyComponent extends EmberObject { + // ... +} +``` + +### `reopen` + +The `reopen` method was used to modify an existing class by adding new properties and methods. This is a risky pattern because it modifies the class for all consumers, which can lead to unexpected behavior. There is no direct replacement for `reopen`. Instead, you should refactor your code to avoid modifying classes at runtime. If you must add functionality, consider using composition or creating a subclass. + +**Before:** + +```javascript +import MyComponent from './my-component'; + +MyComponent.reopen({ + // ... +}); +``` + +**After:** + +There is no direct replacement for `reopen`. You should refactor your code to avoid this pattern. If you need to add functionality, consider creating a subclass: + +```javascript +import MyComponent from './my-component'; + +class ExtendedComponent extends MyComponent { + // ... +} +``` + +### `reopenClass` + +The `reopenClass` method was used to add static properties and methods to a class. This can be replaced with the `static` keyword in native JavaScript. + +**Before:** + +```javascript +import MyComponent from './my-component'; + +MyComponent.reopenClass({ + isMyComponent: true, +}); +``` + +**After:** + +```javascript +import EmberObject from '@ember/object'; + +class MyComponent extends EmberObject { + static isMyComponent = true; +} +``` From 6d4ba57fe446693864909c08666d72547e8625f6 Mon Sep 17 00:00:00 2001 From: Peter Wagenet Date: Mon, 23 Jun 2025 09:31:56 -0700 Subject: [PATCH 2/2] Switch example to be a service --- .../v6/deprecate-classic-class-syntax.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/content/ember/v6/deprecate-classic-class-syntax.md b/content/ember/v6/deprecate-classic-class-syntax.md index 191858c5..3701f86d 100644 --- a/content/ember/v6/deprecate-classic-class-syntax.md +++ b/content/ember/v6/deprecate-classic-class-syntax.md @@ -15,7 +15,7 @@ The `extend` method was used to create a new class that inherited from a parent ```javascript import EmberObject from '@ember/object'; -const MyComponent = EmberObject.extend({ +const MyService = EmberObject.extend({ // ... }); ``` @@ -25,7 +25,7 @@ const MyComponent = EmberObject.extend({ ```javascript import EmberObject from '@ember/object'; -class MyComponent extends EmberObject { +class MyService extends EmberObject { // ... } ``` @@ -37,9 +37,9 @@ The `reopen` method was used to modify an existing class by adding new propertie **Before:** ```javascript -import MyComponent from './my-component'; +import MyService from './my-service'; -MyComponent.reopen({ +MyService.reopen({ // ... }); ``` @@ -49,9 +49,9 @@ MyComponent.reopen({ There is no direct replacement for `reopen`. You should refactor your code to avoid this pattern. If you need to add functionality, consider creating a subclass: ```javascript -import MyComponent from './my-component'; +import MyService from './my-service'; -class ExtendedComponent extends MyComponent { +class ExtendedService extends MyService { // ... } ``` @@ -63,10 +63,10 @@ The `reopenClass` method was used to add static properties and methods to a clas **Before:** ```javascript -import MyComponent from './my-component'; +import MyService from './my-service'; -MyComponent.reopenClass({ - isMyComponent: true, +MyService.reopenClass({ + isMyService: true, }); ``` @@ -75,7 +75,7 @@ MyComponent.reopenClass({ ```javascript import EmberObject from '@ember/object'; -class MyComponent extends EmberObject { - static isMyComponent = true; +class MyService extends EmberObject { + static isMyService = true; } ```