2012-11-07 24 views
10

Çocuğa ebeveyn yapıcıyı çağırmanın iki yolu vardır.Arama yapıcı - Javascript

var A = function A() { 
    this.x = 123; 
}; 

var B = function B() { 

    // 1. call directly 
    A.call(this); 

    // 2. call from prototype 
    A.prototype.constructor.call(this); 
}; 

B.prototype = Object.create(A.prototype); 
B.prototype.constructor = B; 

Kişinin diğerinden daha güvenli/daha iyi olduğu veya her zaman eşdeğer olduğu durumlar var mı?

+0

Ne ikinci sürümünü kullanmak için mecbur olur: Biz ikinci yöntemi kullanırsanız, bu yapıcı B sorunlara neden olur? Aynı işleve ulaşmak için uzun bir yol alıyorsunuz. –

+0

Belki A 'başka bir nesneden bir kurucu miras alınan bir durum? –

+0

Tamam, ama sonra iki çağrı eşdeğer değil. İki farklı durumdan bahsediyorsun. –

cevap

15

Aşağıdaki nedenlerden dolayı doğrudan temel kurucu kullanmak her zaman daha iyidir:

  1. Daha hızlı. Tercümanın prototype.constructor'a erişmesi gerekmez.
  2. Daha güvenlidir. Aşağıdaki programı düşünün.

AC devralır ama A geri A.prototype.constructor kurmayı unuttuğu. Yani şimdi C'a işaret ediyor.

var C = function C() { 
    // some code 
}; 

var A = function A() { 
    this.x = 123; 
}; 

A.prototype = Object.create(C.prototype); 
// I forgot to uncomment the next line: 
// A.prototype.constructor = A; 

var B = function B() { 

    // 1. call directly 
    A.call(this); 

    // 2. call from prototype 
    A.prototype.constructor.call(this); // A.prototype.constructor is C, not A 
}; 

B.prototype = Object.create(A.prototype); 
B.prototype.constructor = B;