home
  • Blog
  • Home
  • Projects
    • Ember
    • EmberData
    • Ember CLI
1.13
  • Packages
    • ember
    • ember-application
    • ember-debug
    • ember-extension-support
    • ember-htmlbars
    • ember-metal
    • ember-routing
    • ember-routing-htmlbars
    • ember-routing-views
    • ember-runtime
    • ember-templates
    • ember-testing
    • ember-views
  • Namespaces
    • Ember
    • Ember.FEATURES
    • Ember.String
    • Ember.computed
    • Ember.inject
    • Ember.run
  • Classes
    • Ember.Application
    • Ember.Array
    • Ember.ArrayProxy
    • Ember.Binding
    • Ember.Checkbox
    • Ember.Component
    • Ember.ComputedProperty
    • Ember.ContainerDebugAdapter
    • Ember.Controller
    • Ember.ControllerMixin
    • Ember.CoreObject
    • Ember.DataAdapter
    • Ember.DefaultResolver
    • Ember.Error
    • Ember.Evented
    • Ember.Helper
    • Ember.InstrumentationSupport
    • Ember.Logger
    • Ember.Mixin
    • Ember.MutableArray
    • Ember.MutableEnumerable
    • Ember.Namespace
    • Ember.NativeArray
    • Ember.Object
    • Ember.Observable
    • Ember.PromiseProxyMixin
    • Ember.Route
    • Ember.Router
    • Ember.Service
    • Ember.Test
    • Ember.Test.Adapter
    • Ember.Test.QUnitAdapter
    • Ember.TextArea
    • Ember.TextField
    • Ember.VisibilitySupport
    • RSVP.EventTarget
    • RSVP.Promise

Function


extend (mixins, arguments) public

Module: ember

Defined in packages/ember-runtime/lib/system/core_object.js:481

mixins
Mixin

One or more Mixin classes

arguments
Object

Object containing values to use within the new class

Creates a new subclass.

App.Person = Ember.Object.extend({
  say: function(thing) {
    alert(thing);
   }
});

This defines a new subclass of Ember.Object: App.Person. It contains one method: say().

You can also create a subclass from any existing class by calling its extend() method. For example, you might want to create a subclass of Ember's built-in Ember.View class:

App.PersonView = Ember.View.extend({
  tagName: 'li',
  classNameBindings: ['isAdministrator']
});

When defining a subclass, you can override methods but still access the implementation of your parent class by calling the special _super() method:

App.Person = Ember.Object.extend({
  say: function(thing) {
    var name = this.get('name');
    alert(name + ' says: ' + thing);
  }
});

App.Soldier = App.Person.extend({
  say: function(thing) {
    this._super(thing + ", sir!");
  },
  march: function(numberOfHours) {
    alert(this.get('name') + ' marches for ' + numberOfHours + ' hours.')
  }
});

var yehuda = App.Soldier.create({
  name: "Yehuda Katz"
});

yehuda.say("Yes");  // alerts "Yehuda Katz says: Yes, sir!"

The create() on line #17 creates an instance of the App.Soldier class. The extend() on line #8 creates a subclass of App.Person. Any instance of the App.Person class will not have the march() method.

You can also pass Mixin classes to add additional properties to the subclass.

App.Person = Ember.Object.extend({
  say: function(thing) {
    alert(this.get('name') + ' says: ' + thing);
  }
});

App.SingingMixin = Mixin.create({
  sing: function(thing){
    alert(this.get('name') + ' sings: la la la ' + thing);
  }
});

App.BroadwayStar = App.Person.extend(App.SingingMixin, {
  dance: function() {
    alert(this.get('name') + ' dances: tap tap tap tap ');
  }
});

The App.BroadwayStar class contains three methods: say(), sing(), and dance().

Team Sponsors Security Legal Branding Community Guidelines
Twitter GitHub Discord Mastodon

If you want help you can contact us by email, open an issue, or get realtime help by joining the Ember Discord.

© Copyright 2026 - Tilde Inc.
Ember.js is free, open source and always will be.


Ember is generously supported by
blue Created with Sketch.