开发者

What does this do?

开发者 https://www.devze.com 2022-12-30 20:14 出处:网络
I found this. What does it do? function G(a, b) { var c = function() { }; c.p开发者_运维问答rototype = b.prototype;

I found this. What does it do?

function G(a, b) {
  var c = function() { };
  c.p开发者_运维问答rototype = b.prototype;
  a.T = b.prototype;
  a.prototype = new c;
}
  • It looks very similar to Crockford's Prototypal Inheritance in JavaScript.
  • Stackoverflow: What is happening in Crockford’s object creation technique?.


It looks similar to the Crockford's Object.create method, but this function is used to "setup" constructors.

It accepts two constructors as arguments, and it setups the prototype of the first one.

Let me rename the cryptic variable names:

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"}

Edit: The T property is simply used to know what is the "super" constructor of the sub one, I've seen this pattern on other places, like in the book Pro JavaScript Design Patterns (page 43), with some additions, to prevent the constructor property to point to the wrong object:

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;
    }
}

See also:

  • JavaScript inheritance extend function


it looks like it gives you the ability to pass in a function, make changes to it, and then pass it back - a.prototype is a new instantiated copy of it. There are examples on the net using this type of code for "getting" and "setting".

0

精彩评论

暂无评论...
验证码 换一张
取 消