Bir örneğin, başka bir özel durumun özel durumunu mi devralmasını istiyorsunuz? Bunu JavaScript'de yapabileceğinizden emin olun. aşağıdaki gibi
var Dog = (function() {
function Dog() {
if (this instanceof Dog) {
// constructor code
} else return Object.create(private);
}
var public = Dog.prototype, private = Object.create(public, {
size: {
value: "big"
}
});
public.saySize = weakBind(function (private) {
return "I am a " + private.size + " dog.";
}, public, private);
return Dog;
}());
Artık bir köpek oluşturabilirsiniz: şu şekildedir:
function weakBind(functable, prototype, state) {
return function() {
return functable.apply(this, Object.getPrototypeOf(this) === prototype ?
[state].concat(Array.prototype.slice.call(arguments)) : arguments);
};
}
Şimdi bizim temel sınıfını oluşturabilirsiniz: Önce bir yarar fonksiyonunu tanımlamak gerekir
var dog = new Dog;
alert(dog.saySize()); // I am a big dog.
alert(dog.size); // undefined
Biz özel durumu aşağıdaki gibi alabilir:
aşağıdaki gibi 210
Artık bir chihuahua oluşturabilirsiniz:
var chi = new Chihuahua;
alert(chi.saySize()); // I am a small dog.
alert(chi.size); // undefined
demo izleyin: http://jsfiddle.net/b3Eyn/
Not: Sadece JavaScript özel durumu devralır mümkün olduğunu göstermek için bu cevabı yazdım. Ancak bu deseni kullanmamanızı tavsiye ederim. Kodunuzu iyi tasarlarsanız, ilk etapta özel durumu devralmanız gerekmeyecektir.
Bu işlev nedir? Dog = (function() {})() '? – Amberlamps
'private' üyeleri, OOP'yi destekleyen _any_ dilinde tanımlandıkları bir sınıf içinde _only_ görünürler. Yapmaya çalıştığın şeyi anlamıyorum. – Leri
Genel olarak hayır, ancak "özel işlevinize", "notSoPrivateSaySize = new Dog() aracılığıyla kolayca erişilebilir.publicSaySize(); ' – Bergi