在backbone&#j; js中有一个模型对象,您可以在其中设置属性并扩展函数,并返回一个可以使用的新原型。
见第一个例子:
var Human = Backbone.Model.extend({
initialize: function(){
alert("Welcome to this world");
}
});
var human = new Human();
来源:https://cdnjs.com/libraries/backbone.js/tutorials/what-is-a-model
我试图在ES6中实现这一目标,但缺乏对javascript原型的深入理解。
我写了一些允许这样的内容:
var Model = {
foo() {
return 'bar';
},
extend(object) {
var Extend = function() {
// Set prototype's schema
this.schema = object.schema;
// Inherit model's functions
this.foo = Model.foo;
}
return Extend;
}
}
// Extend model and create a new prototype
var Human = Mode.extend({
schema: {
name: 'string',
age: 'number'
}
});
var human1 = new Human();
var human2 = new Human();
console.log( human1.foo() ); // bar
console.log( human1.schema ); // { name: 'string', age: 'number' }
console.log( human2.schema ); // { name: 'string', age: 'number' }
我想使用这样的概念来实现backbone.js在es6中实现的目标。有没有更好的方法呢?
编辑: 对不起,我应该澄清,我需要它是原型的向后兼容性。这将是一个小型库,您不需要使用ES6或类。我只想在es6中编写库。该库的用户应该能够通过扩展函数构建新的模型原型。
答案 0 :(得分:1)
ECMAScript 6(a.k.a. ECMAScript 2015)引入了一种类定义语法,它与其他OOP类结构非常相似,它们提供了继承和对基类对象的轻松访问。
然而,引入的JavaScript类是引用MDN website"语法糖而不是JavaScript现有的基于原型的继承。类语法没有向JavaScript引入新的面向对象的继承模型。 JavaScript类为创建对象和处理继承提供了更简单,更清晰的语法。"
在我看来,这一点都非常受欢迎 - 语法糖与否。
目前最大的问题是缺乏支持的浏览器。但如果您致力于利用E6,那么您应该研究这种新语法。
MDN网站也有大量有关原型继承的信息。
答案 1 :(得分:0)
如果它的ES6然后使用类
class Alien {
constructor(type) {
this.type = type;
}
role() {
if (this.type === "Evil") {
console.log("To destroy the earth and enslave the humans");
} else {
console.log("To make crop circles and appear in blurry tabloid photos.");
}
}
}
class SciFi extends Alien {
role() {
if (this.type === "Evil") {
console.log("To destroy the rebel alliance.");
} else {
console.log("To phone home.");
}
}
}