SORU
21 Ocak 2010, PERŞEMBE


Nasıl javascript bir sınıfından?

PHP/Java:

class Sub extends Base
{
}

Ve otomatik olarak Süper sınıf/korumalı yöntemleri, özellikleri, alanlar, vb tüm kamu geçersiz gerekirse hangi Alt sınıfın bir parçası haline gelir.

Javascript bunun için eşdeğer nedir?

CEVAP
21 Ocak 2010, PERŞEMBE


JavaScript yoksınıflarama kalıtım ve davranış pek çok açıdan yeniden alabilirsiniz:

Pseudo-klasik miras (prototipleme):

function Super () {
  this.member1 = 'superMember1';
}
Super.prototype.member2 = 'superMember2';

function Sub() {
  this.member3 = 'subMember3';
  //...
}
Sub.prototype = new Super();

new operatör kullanılmalıdır:

var subInstance = new Sub();

Fonksiyon uygulama veya "yapıcı zincirleme":

function Super () {
  this.member1 = 'superMember1';
  this.member2 = 'superMember2';
}


function Sub() {
  Super.apply(this, arguments);
  this.member3 = 'subMember3';
}

Bu yaklaşım aynı zamanda new operatör kullanılmalıdır:

var subInstance = new Sub();

Farkı ile ilk örnektir o zaman biz apply Super kurucu this nesne içinde Sub ekler özelliklerini tayin için this Super doğrudan yeni örneği, örn: subInstance içerdiği özellikler member1 member2 doğrudan (subInstance.hasOwnProperty('member1') == true;).

İlk örnekte, bu özellikleri ile ulaşabilirsinizprototip zinciri, [[Prototype]] dahili bir nesne değildir.

Parazit miras ya da Güç Kurucular:

function createSuper() {
  var obj = {
    member1: 'superMember1',
    member2: 'superMember2'
  };

  return obj;
}

function createSub() {
  var obj = createSuper();
  obj.member3 = 'subMember3';
  return obj;
}

Bu yaklaşım temelde "" new operatör kullanmanıza gerek yok, ve gördüğünüz gibi, this anahtar kelime dahil değildir. artırmada nesne dayanmaktadır

var subInstance = createSub();

5th Ed ECMA. Object.create yöntem:

// Check if native implementation available
if (typeof Object.create !== 'function') {
  Object.create = function (o) {
    function F() {}  // empty constructor
    F.prototype = o; // set base object as prototype
    return new F();  // return empty object with right [[Prototype]]
  };
}

var superInstance = {
  member1: 'superMember1',
  member2: 'superMember2'
};

var subInstance = Object.create(superInstance);
subInstance.member3 = 'subMember3';

Yukarıdaki yöntem ilk miras tekniği Crockford tarafından önerilen.

Nesne örnekleri olduğu diğer nesne örnekleri, devralır.

Bu tekniği daha iyi, daha basit "büyütme kalıtsal özellikleri beri her yeni nesne örnekleri üzerinden kopyalanan değil çünkü". bir nesne olabilir ^em>tabannesne [[Prototype]] olarak ayarlanıruzatılmışnesne, yukarıdaki örnekte subInstance member3 özelliği içerir fiziksel olarak.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • backyardjay

    backyardjay

    8 ŞUBAT 2009
  • HDstarcraft

    HDstarcraft

    12 Mayıs 2009
  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011