function G(a, b) {
var c = function() { };
c.prototype = b.prototype;
a.T = b.prototype;
a.prototype = new c;
}
答案 0 :(得分:1)
它看起来类似于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;
}
}
另见:
答案 1 :(得分:0)
它看起来像是能够传递函数,对其进行更改,然后将其传回去 - a.prototype是一个新的实例化副本。网上有一些例子,使用这种类型的代码来“获取”和“设置”。