SORU
25 AĞUSTOS 2010, ÇARŞAMBA


Prototip ile nesne yönelimli javascript vs kapaklar

Fark şu OOP javascript teknikleri arasında ne olduğunu merak ediyorum. Aynı işi yapmak görünüyorlar ama biri diğerinden daha iyi olarak kabul edilir?

function Book(title) {
    this.title = title;
}

Book.prototype.getTitle = function () {
    return this.title;
};

var myBook = new Book('War and Peace');
alert(myBook.getTitle())

vs

function Book(title) {
    var book = {
        title: title
    };
    book.getTitle = function () {
        return this.title;
    };
    return book;
}

var myBook = Book('War and Peace');
alert(myBook.getTitle())

CEVAP
25 AĞUSTOS 2010, ÇARŞAMBA


İkincisi gerçekten bir kopyasını oluşturmak değil, sadece bir nesne döndürür. instanceof gibi operatörler yararlanabilirsiniz. Örn. ilk dava ile if (myBook instanceof Book) değişken ikinci örnek ile bu başarısız olur, ancak Kitap türü ise, kontrol etmek için yapabilirsiniz.

Eğer kurucu nesne yöntemlerini belirlemek istiyorsanız, bu bunu yapmak için doğru yoldur:

function Book(title) {
    this.title = title;

    this.getTitle = function () {
        return this.title;
    };
}

var myBook = new Book('War and Peace');
alert(myBook.getTitle())

Bu örnekte de aynı şekilde davranmasına rağmen, farklılıklar vardır. Temelli kapatma uygulama ile özel değişkenler ve yöntemler (sadece this nesne onları bırakmayın) olabilir. Bir şey gibi yapabilirsiniz:

function Book(title) {
    var title_;

    this.getTitle = function() {
        return title_;
    };

    this.setTitle = function(title) {
        title_ = title;
    };

    // should use the setter in case it does something else than just assign
    this.setTitle(title);
}

Kod Kitabı işlevi dışında üye değişkeni doğrudan erişemez, set kullanmak zorunda.

Diğer büyük fark performans; Prototip tabanlı sınıflandırmaya genellikle çok daha hızlı, biraz havai kapanışları kullanarak dahil kaynaklanmaktadır. Bu makalede performans farklılıkları hakkında bilgi edinin: http://blogs.msdn.com/b/kristoffer/archive/2007/02/13/javascript-prototype-versus-closure-execution-speed.aspx

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • MVLV28

    MVLV28

    17 Mart 2008
  • TecnoTutosPC

    TecnoTutosPC

    19 Kasım 2012