js/libs/ember-1.5.1.js
function() {
    var Class = makeCtor(), proto;
    Class.ClassMixin = Mixin.create(this.ClassMixin);
    Class.PrototypeMixin = Mixin.create(this.PrototypeMixin);

    Class.ClassMixin.ownerConstructor = Class;
    Class.PrototypeMixin.ownerConstructor = Class;

    reopen.apply(Class.PrototypeMixin, arguments);

    Class.superclass = this;
    Class.__super__  = this.prototype;

    proto = Class.prototype = o_create(this.prototype);
    proto.constructor = Class;
    generateGuid(proto);
    meta(proto).proto = proto; // this will disable observers on prototype

    Class.ClassMixin.apply(Class);
    return Class;
  }
function() {
    var Class = makeCtor(), proto;
    Class.ClassMixin = Mixin.create(this.ClassMixin);
    Class.PrototypeMixin = Mixin.create(this.PrototypeMixin);

    Class.ClassMixin.ownerConstructor = Class;
    Class.PrototypeMixin.ownerConstructor = Class;

    reopen.apply(Class.PrototypeMixin, arguments);

    Class.superclass = this;
    Class.__super__  = this.prototype;

    proto = Class.prototype = o_create(this.prototype);
    proto.constructor = Class;
    generateGuid(proto);
    meta(proto).proto = proto; // this will disable observers on prototype

    Class.ClassMixin.apply(Class);
    return Class;
  }
Creates a new subclass.

```javascript
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:

```javascript
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:

```javascript
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 `Ember.Mixin` classes to add additional properties to the subclass.

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

App.SingingMixin = Ember.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()`.

@method extend
@static

@param {Ember.Mixin} [mixins]* One or more Ember.Mixin classes
@param {Object} [arguments]* Object containing values to use within the new class