Prototypejs $super的原生 JS 实现
Native JS implementation to Prototypejs's $super
因此,我们可以使用 Object.create 的 JavaScript 原生实现来模拟原型的 Class.create。但是,有$super的概念。
这是定义:
方法定义中的$super参数
当您重写子类中的方法,但仍希望能够 调用原始方法,您将需要对它的引用。您可以 通过使用额外的参数定义这些方法来获取该引用 在前面:$super。原型将检测到这一点并使 通过该参数可以使用的重写方法。但对 在外界之外,Pirate#say 方法仍然期望只有一个参数。 请记住这一点。
这是他们的例子:
/** new, preferred syntax **/
// properties are directly passed to `create` method
var Person = Class.create({
initialize: function(name) {
this.name = name;
},
say: function(message) {
return this.name + ': ' + message;
}
});
// when subclassing, specify the class you want to inherit from
var Pirate = Class.create(Person, {
// redefine the speak method
say: function($super, message) {
return $super(message) + ', yarr!';
}
});
var john = new Pirate('Long John');
john.say('ahoy matey');
如何使用本机JS或jQuery来模仿这种行为?
不使用 jQuery,因为它没有任何继承工具(除了 $.extend
(。
您可以简单地在本机继承模式中引用父级的原型方法,也可以与揭示原型模块结合使用:
function Person(name) {
this.name = name;
}
Person.prototype.say = function(message) {
return this.name + ":" + message;
};
function Pirate(name) {
Person.call(this, name);
}
Pirate.prototype = (function(super) {
var p = Object.create(super, {
constructor: {value: Pirate}
});
p.say = function(message) {
return super.say.call(this, message) + ", yarr!";
};
return p;
})(Person.prototype);
相关文章:
- HTML中两种JS实现之间的差异
- 使用 JavaScript/Node.js 实现插件架构
- 如何使用结构 JS 实现对比度
- 通过JS实现面板可见性
- 我怎样才能用 Require.js 实现 TinyMCE
- 使用Skrollr.js实现水平效果
- 基本 JS 实现基本数学来转换值
- Prototypejs $super的原生 JS 实现
- 使用 JS 实现 HTML 最小化器插件
- 分析JS实现中的XLS(Excel)文件
- 如何使用paper.js实现多点触摸交互
- 如何使用sinon.js实现mock/stub回调函数
- React.js-实现组件排序
- 是否可以用Ext.js实现可移动工具栏,如果可以,如何用我的代码实现
- 棘轮与角js实现
- JavaScript/List.js:实现模糊搜索
- 尝试使用cucumber.js实现页面对象模型时出错
- 如何使用Thinktecture.IdentityServer.v2和Node.js实现WS-Federation
- 使用Node.js实现网页自动化
- 使用MVC/Backbone.js实现复合模式