Javascript原型类继承

Javascript原型类继承,javascript,jquery,class,prototype,underscore.js,Javascript,Jquery,Class,Prototype,Underscore.js,我读了很多书。我已经写了很多虚拟代码。当我开始一劳永逸地征服JavaScript继承时,我仍然和我一样困惑。也许更是如此 我非常欣赏Backbone.js,我喜欢它对集合的使用。所以我读了这本书,觉得很受启发。但我总是在继承和扩展对象的问题上绊倒 下面是我所能推断出的具有继承性的Javascript类,出于这个用途,我看不到使用extend的好处: function Collection(){ this._models = []; } Collectio

我读了很多书。我已经写了很多虚拟代码。当我开始一劳永逸地征服JavaScript继承时,我仍然和我一样困惑。也许更是如此

我非常欣赏
Backbone.js
,我喜欢它对集合的使用。所以我读了这本书,觉得很受启发。但我总是在继承和扩展对象的问题上绊倒

下面是我所能推断出的具有继承性的Javascript类,出于这个用途,我看不到使用extend的好处:

    function Collection(){
        this._models = [];
    }

    Collection.prototype = {

        models: function() {
            return this._models;
        },

        fetch: function() { 
            console.log("TODO Override fetch method"); 
        },

        add: function(model){
            this._models.push(model);
            $(this).triggerHandler("add", model);
        },
    }

    function Employees(){}

    Employees.prototype = new Collection();

    Employees.prototype.fetch = function(){
        this._models = [new Person("Ron", "male"), new Person("Stevie", "female"),  new Person("David Blunkett", "female")];
    }
直接在
Employees
中访问超类(
Collection
\u models
属性感觉有点奇怪,但它可以工作。这种方法有什么问题吗?有什么要注意的吗?我不想建立一个应用程序的基础上,这发现它有点。。。氟化钠

编辑 可能值得注意的是,一个
也是一个
模型

function Model(){}

Model.prototype = {
    get: function(attr){
        return this.attr;   
    },
    set: function(attr, value){
        return this[attr] = value;
    }
}

function Person(name, gender){
    this.name = name;
    this.gender = gender;
}

Person.prototype = new Model();

创建父类的新实例并将其指定为子类的原型的方法就是Douglas Crockford在JavaScript中所称的“伪经典”继承方法。看看他在哪里详细介绍了伪经典、原型和寄生遗传方法以及一些变体。(伪经典大约12分钟)

您的方法有一个(可能很大)的限制,即您不能在此模式中共享构造函数代码(至少不能没有一些额外的幻想)。因此,如果你这样做:

var e = new Employees();
console.log(e.constructor);

您将看到
收集
功能,而不是更直观的
员工
功能。再次,请观看该视频,它确实非常清楚地涵盖了整个主题。

您创建父类的新实例并将其指定为子类的原型的方法就是Douglas Crockford所称的JavaScript继承的“伪经典”方法。看看他在哪里详细介绍了伪经典、原型和寄生遗传方法以及一些变体。(伪经典大约12分钟)

您的方法有一个(可能很大)的限制,即您不能在此模式中共享构造函数代码(至少不能没有一些额外的幻想)。因此,如果你这样做:

var e = new Employees();
console.log(e.constructor);

您将看到
收集
功能,而不是更直观的
员工
功能。请再次观看该视频,它确实非常清楚地涵盖了整个主题。

谢谢。今晚我会试着给它一块手表。学习Javascript“类”真的让我望而却步谢谢。今晚我会试着给它一块手表。学习Javascript“类”真的让我望而却步