在他sitepoint文章關於javascript inheritance,哈利Fuecks解釋實現繼承的方式如下:Javascript繼承的實現問題
function copyPrototype(descendant, parent) {
var sConstructor = parent.toString();
var aMatch = sConstructor.match(/\s*function (.*)\(/);
if (aMatch != null) { descendant.prototype[aMatch[1]] = parent; }
for (var m in parent.prototype) {
descendant.prototype[m] = parent.prototype[m];
}
};
雖然我理解他的代碼,一個問題浮現在腦海 - 爲什麼不去掉for循環並乾脆這樣做:
function copyPrototype(descendant, parent) {
var sConstructor = parent.toString();
var aMatch = sConstructor.match(/\s*function (.*)\(/);
if (aMatch != null) { descendant.prototype[aMatch[1]] = parent; }
descendant.prototype = parent.prototype;
};
謝謝。
這是一種可怕的方式來實現繼承 - 功能反編譯,手動複製屬性(甚至沒有照顧DontEnum錯誤),而不是更有效的原型方法等。 – kangax 2009-10-02 02:46:34
隨時發佈您的做法 – 2009-10-02 04:03:03
我會建議閱讀克羅克福德的文章(http://www.crockford.com/javascript/inheritance.html),瞭解一個簡單的以初學者爲中心的JS繼承概述。爲了更深入瞭解,請查看Michaux(http://peter.michaux.ca/articles/class-based-inheritance-in-javascript)或Giammarchi(http://www.3site.eu/doc/)文章。 – kangax 2009-10-02 05:09:25