因此,我们可以使用 Object.create 的 JavaScript 原生实现来模拟原型的 Class.create.. 但是,有 $super 的概念。
这是定义:
方法定义中的 $super 参数
当您覆盖子类中的方法,但仍希望能够调用原始方法时,您将需要对它的引用。您可以通过在前面使用额外参数定义这些方法来获得该引用:$super。Prototype 将检测到这一点,并通过该参数使您可以使用被覆盖的方法。但是对于外界来说,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 来模仿这种行为?