它看起来类似于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