Более оптимальный способ почти такой же, как и у вас, но вы вызываете родительский метод поверх this
:
child.prototype.two = function(arg1, arg2) {
parent.prototype.two.call(this, arg1, arg2);
};
Но я рекомендую вам использовать пользовательскую функцию для расширения, вы можете использовать extend
из jsbase
Если вы используете геттеры/сеттеры ECMAScript 5 (а не только первый), вы можете предпочесть использовать тот, который находится по адресу суть
Оба могут использоваться одинаково, основываясь на идее Дина Эдварда:
var Animal = extend(Object, {
constructor: function(name) {
// Invoke Object's constructor
this.base();
this.name = name;
// Log creation
console.log('New animal named ' + name);
},
// Abstract
makeSound: function() {
console.log(this.name + ' is going to make a sound :)');
},
});
var Dog = Animal.extend({
constructor: function(name) {
// Invoke Animals's constructor
this.base(name);
// Log creation
console.log('Dog instanciation');
},
bark: function() {
console.log('WOF!!!');
},
makeSound: function() {
this.base();
this.bark();
}
});
var pet = new Dog('buddy');
// New animal named buddy
// Dog instanciation
pet.makeSound();
// buddy is going to make a sound :)
// WOF!!!
В вашем случае это может быть:
var parent = extend(Object, {
one: function() {
$('body').append("Parent: one <br/>");
},
two: function() {
this.one();
$('body').append("Parent: two <br/>");
}
});
var child = parent.extend({
one: function() {
$('body').append('Child: one <br />');
},
two: function() {
$('body').append('Child: do some child stuff here and call parent: <br />');
this.base();
}
});
person
A. Matías Quezada
schedule
26.09.2013
this.one()
звонитparent.prototype.one()
вtwo()
вашего ребенка, потому чтоthis
этоparent.prototype
- person Joe Simmons   schedule 26.09.2013child.prototype.one()
? Я не уверен, что вы на самом деле пытаетесь сделать. Для чего все это? - person Joe Simmons   schedule 26.09.2013parent.prototype.two.call(this)
? - person slebetman   schedule 26.09.2013one
в цепочке прототиповthis
, и этоchild.prototype.one.
this` — это объект, а не прототипыchild.prototype
, чем прототипыparent.prototype
- person A. Matías Quezada   schedule 27.09.2013this.one()
звонитparent.prototype.one
в детскийtwo()
, потому чтоthis
этоparent.prototype
. Это неправда,this
является объектом, чем прототипыchild.prototype
, поэтомуthis.one
относится кchild.prototype.one
- person A. Matías Quezada   schedule 28.09.2013parent.prototype.two()
, "это" будетparent.prototype
- person Joe Simmons   schedule 29.09.2013