这是做什么的?

时间:2010-05-20 14:45:00

标签: javascript

我找到了这个。它做了什么?

function G(a, b) {
  var c = function() { };
  c.prototype = b.prototype;
  a.T = b.prototype;
  a.prototype = new c;
}

2 个答案:

答案 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是一个新的实例化副本。网上有一些例子,使用这种类型的代码来“获取”和“设置”。