Бесконечной рекурсия
function foo() {} foo.prototype.identify = function() { return "I'm a foo"; } function bar() {} extend(bar, foo) bar.prototype.identify = function() { return "I'm a bar and " + this.constructor.superclass.identify.apply(this, arguments); } function zot() {} extend(zot, bar) zot.prototype.identify = function() { return "I'm a zot and " + this.constructor.superclass.identify.apply(this, arguments); } f = new foo(); alert(f.identify()); // "I'm a foo" b = new bar(); alert(b.identify()); // "I'm a bar and I'm a foo" z = new zot(); alert(z.identify()); // stack overflowНе могу понять пример, почему обращение происходит к дочернему классу zot из bar? Из-за передаваемого контекста this в apply? |
В общих чертах: так в js не делают. Для экземпляра zot, this.constructor.superclass === bar.prototype. И, соотвественно, this.constructor.superclass.identify в bar.prototype.identify ссылается сам на себя. Делают так:
function foo() {} foo.prototype.identify = function() { return "I'm a foo"; } function bar() {} extend(bar, foo) bar.prototype.identify = function() { return "I'm a bar and " + foo.prototype.identify.apply(this, arguments); } function zot() {} extend(zot, bar) zot.prototype.identify = function() { return "I'm a zot and " + bar.prototype.identify.apply(this, arguments); } |
Разобрался. This в bar будет являться экземпляром zot.
|
Часовой пояс GMT +3, время: 07:41. |