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

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • campos9896

    campos9896

    24 Mart 2012
  • POGProductionz

    POGProductio

    27 NİSAN 2012