czytanie wprowadzający:obchodzenia konstrukcja API i OO cukier
Po wzorców opisanych powyżej tworzę Biblioteka/API w następującym
var Proto = {
constructor: function() {
this.works = true;
},
method: function() {
return this.works;
}
};
Teraz aby użytkownicy bibliotek mogli wchodzić w interakcje z moimi prototypami (które nie mają ply funkcje fabrycznych) mają do instancji i zainicjować obiektu
// instantiate
var p = Object.create(Proto);
// initialize
p.constructor();
To jest nieprzyjazny i rozwlekły sposób zmuszając użytkowników do instancji i zainicjować swoje obiekty.
osobiście ponieważ używam pd
we wszystkich moich zastosowań Mam następujący cukier
// instantiate or initialize
var p = Proto.new();
// or without bolting onto Object.prototype
var p = pd.new(Proto);
Jednak myślę, że to niedobry zmusić pd na użytkowników, więc nie jestem pewien, co jest najlepszym sposobem, aby moje biblioteki użytkowej .
- Ludzie tworzenia nowych wystąpień
Proto
i nazywają.constructor
samym sobą - zmusić ludzi do korzystania
pd
- Daj FUNKCJE fabrycznych
.create
styl - zrezygnować i korzystać
new <Function>
i.prototype
1 i 2 zostały już wymienione.
3 będzie zasadniczo
Proto.create = pd.new.bind(pd, Proto);
4 pozwoliłoby mi smutno, ale potwierdzający do znanej standardowy sposób robienia rzeczy zwiększa użyteczność.
Generalnie przy korzystaniu z niestandardowych wzorów OO, jakie są najprostsze mechanizmy umożliwiające użytkownikom korzystanie z mojej biblioteki w aplikacji?
Jestem obecnie chciałoby się powiedzieć
// here is my Prototype
Proto;
// here is how you instantiate a new instance
var p = Object.create(Proto);
// here is how you initialize it
// yes instantiation and initialization are seperate and should be.
p.constructor();
// Want sugar, use pd.new
, ale w zasadzie to jest po prostu # 4. Tworzę obiekty, które są funkcjami. Naprawdę nie chcę tego robić. – Raynos
@Raynos: To prawda, ale tak właśnie robią wszyscy inni. Wolałbym, żeby wszyscy używali prototypów jako klas (PAC), ale prawdopodobnie nigdy się to nie stanie. Jednak [klasy literały] (http://wiki.ecmascript.org/doku.php?id=harmony:classes) najprawdopodobniej przejdą na ES6, a potem wszystko będzie wyglądało jak PAC. Uważam, że jest to do przyjęcia, ponieważ utrzymuje zgodność. To, co jest pod maską, jest dość przejrzyste. Po prostu nie chciałbym tego zarządzać. Jeśli ES6 zrobi to dla mnie - to dobrze. –
Wybrałem opcję ["tutaj, w jaki sposób tworzysz i inicjujesz PAC] (http://raynos.org/blog/7/Doing-Object-Oriented-Javascript---part-3). Teraz, gdy wiesz, że może użyć mojego kodu, wszystko ma sens. " – Raynos