是否有可能在Javascript中繼承特權方法?在下面,Widget成功繼承D
函數,但不是subscribe
。將第二行繼承爲f.prototype = new base();
似乎可行,但我知道這是由於種種原因造成的。有沒有一種乾淨的方式來做到這一點,還是我必須公開一切? This answer似乎暗示我必須公開方法(附加到原型),但我想直接詢問。Javascript繼承和特權函數
function EventRaiser() {
var events = {};
this.subscribe = function(key, func) { /* elided */ };
}
EventRaiser.prototype.D = function() { alert("D"); };
function Widget() { }
function Inherit(sub, base) {
function f() { }
f.prototype = base.prototype;
sub.prototype = new f();
sub.prototype.constructor = sub;
}
Inherit(Widget, EventRaiser);
'EventRaiser.call(this)'是我認爲我需要的。爲什麼這種不好的風格?鏈接到你的基礎ctor是OO Languages的常見做法,甚至這個JS樣本也可以這樣做http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html –
@AdamRackis沒有基礎構造函數的概念。您在JavaScript中模擬經典的OO和Java。這是不好的風格 – Raynos