它看起來類似於Crockford的Object.create
方法,但該函數用於「設置」構造函數。
它接受兩個構造函數作爲參數,並且它設置了第一個構造函數的prototype
。
讓我重新命名神祕的變量名:
function G(sub, super) {
var F = function() { };
F.prototype = super.prototype;
sub.superLink = super.prototype;
sub.prototype = new F();
}
function Super() {
//...
}
Super.prototype.member1 = 'superMember1';
function Sub() {
this.member2 = 'subMember2';
}
G(Sub, Super);
new Sub(); // Object { member2="subMember2", member1="superMember1"}
編輯:的T
屬性只是用來知道什麼是子之一的「超級」的構造,我已經看到了這種模式的其他地方,如在書專業JavaScript的設計模式(page 43),與一些補充,防止constructor
屬性指向了錯誤的對象:
function extend(subClass, superClass) {
var F = function() {};
F.prototype = superClass.prototype;
subClass.prototype = new F();
subClass.prototype.constructor = subClass;
subClass.superclass = superClass.prototype;
if(superClass.prototype.constructor == Object.prototype.constructor) {
superClass.prototype.constructor = superClass;
}
}
參見:
來源
2010-05-20 14:55:32
CMS
我猜你在問什麼是「爲什麼有人會這樣做?」,因爲除了回答「迷惑人」之外,我沒有任何東西可以幫你。 – wlangstroth 2010-05-20 14:56:04
你從哪裏找到這個?被設置的'T'屬性並不是典型的關於原型繼承的任何模式。 但我相信這可能是有繼承的構造函數以及原型鏈。 – 2010-05-20 15:00:31