Tworzenie nowe obiektu

0

Witam
Czytam sobie książkę JS: Mocne Strony, autor proponuje aby nie tworzyć nowych obiektów poprzez wywoływanie funkcji z operatorem new, oraz ze lepszym pomysłem jest napisanie funkcji która zwraca obiekt(stosując domkniecie). Dodatkowo na jakimś blogu wyczytałem że jednak lepiej jest tworzyć obiekt poprzez wywołanie funkcji z operatorem new, argumentował to takim przykładem:

var Obj = function () {
    return { value: 'value' };
};
var obj1 = Obj();
var obj2 = new Obj();
 
obj1.constructor; // -> Object()
obj2.constructor; // -> Object()
obj1.constructor.toString(); // -> "function Object() { [native code] }"
obj2.constructor.toString(); // -> "function Object() { [native code] }"

Głownie chodzi to ze nie możemy się już dostać od funkcji która konstruowała obiekt. Wydaje mi się to logiczne ponieważ jej nie napisaliśmy.

Które rozwiązanie jest lepsze oraz dlaczego?

W tej chwili korzystam z czegoś takiego, i tutaj tłumaczenie autora książki nie ma zastosowania bo przecież bez problemu da się utworzyć zmienne prywatne(strona 45 drugi akapit).

var Car = function (name, speed) {
    this.petName = name;
    var maxSpeed = speed;
    this.writePetName = function () { document.writeln(this.petName) }
    function writeMaxSpeed() { document.writeln(maxSpeed) }
}
var c = new Car("BMW", 100);

c.writePetName();
document.writeln(c.petName)
c.writeMaxSpeed(); // blad, prywatne
document.writeln(c.maxSpeed); // blad, prywatne
 
0

Jest ktoś w stanie udzielić mi odpowiedzi, przez to cały mój projekt stanął bo nie chce go od początku źle pisać.

0

Mocne Strony, autor proponuje aby nie tworzyć nowych obiektów poprzez wywoływanie funkcji z operatorem new, oraz ze lepszym pomysłem jest napisanie funkcji która zwraca obiekt(stosując domkniecie).

Z perspektywy Pythona mogę powiedzieć, że w wielu przypadkach domknięcia mają wiele wspólnego z pythonowym generatorem i korutyną, a te z kolei najbardziej kojarzą mi się z funkcją, która po prostu ma własny stan.

Generalnie wszystko można programować w oparciu o same klasy czego dowodem jest Java. Jednak takie rozwiązanie jest upierdliwe (co też widać). Tworzenie prostych i nierozszerzalnych klas jest po prostu niewygodne, bo trzeba robić klasę, konstruktory, metody, pola..

Dlatego w trywialnych przypadkach lepiej stosować właśnie funkcje, dekoratory, struktury, generatory czy też wspomniane domknięcia.

W każdym razie nie powinno się ignorować istnienia klas tylko dlatego, że JS ich jawnie nie oferuje. Powstało już wiele prostych bibliotek do tworzenia pseudoklas w JS i warto z nich korzystać, bo przecież co złego jest w modularnym kodzie? Wg mnie oczywisty kod to dobry kod.

Dlatego tworząc klasy zainteresuj się np takim modułem: http://classy.pocoo.org/

0

To jest jakieś rozwiązanie, ale osobiście wolał bym używać "natywnego" tworzenia obiektów bez posiłkowania się do tego zewnętrzną biblioteka.

Znalazłem kolejny powód dla którego domknięcia były by teoretycznie lepsze, tworząc obiekt za pomocą domknięcia obiekt jest "bezpieczny" bo nie używa się wtedy this i that.

Nie wierze że na tym forum nie ma żadnego wyjadacza JS żeby mi to wytłumaczyć, przeciecz teraz tyle się pisze w JS.

1 użytkowników online, w tym zalogowanych: 0, gości: 1