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
İ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
Pratik javascript örnekleri yönelimli ...
Bir JavaScript başlatmasını prototip ç...
Ayrıştırma JSON JavaScript Nesne, Beli...
Nasıl JavaScript yok .prototip çalışma...
Eğer anahtar kontrol JavaScript bir ne...