Crockford'un Object.create
yöntemine benzer, ancak bu işlev kurucuları "kurmak" için kullanılır.
İki kurucu argüman olarak kabul eder ve ilkinin prototype
ayarını yapar.
beni şifreli değişken isimleri yeniden adlandırmak edelim:
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"}
Düzenleme: T
özellik sadece ne alt birinin "süper" yapıcı olduğunu bilmek kullanılır, ben bu modeli gördüm kitapta Pro JavaScript Design Patterns gibi başka yerlerde, (page 43), bazı eklemelerle, yanlış nesneye işaret etmek constructor
özelliğini engellemek için:
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;
}
}
Ayrıca bkz:
Sanırım ne soruyorsun "neden bunu yapardı?", Çünkü "insanları karıştırmak" yerine, senin için hiçbir şeyim yok. – wlangstroth
Bunu nereden buldunuz? Ayarlanan "T" özelliği, prototipik miras ile ilgili gördüğüm herhangi bir model için tipik değildir. Ama bunun olabileceğine inandığım şey, yapıcının prototip zincirinin yanı sıra devralınmasıdır. –