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