W JavaScript, podoba mi się konwencja nazw PascalCase dla funkcji konstruktora i camelCase dla innych funkcji. Wygląda na to, że ReSharper jest skonfigurowany dla tych ustawień. Jednak dla kodu:Ostrzeżenia ReSharper dotyczące konwencji nazewnictwa JavaScript na funkcje konstruktora
function Thing(a, b) {
return {
prop1: a,
prop2: b
};
}
var thing = new Thing(2, 6);
... Otrzymuję to ostrzeżenie:
Nazwa „rzecz” nie nie pasujące do zasady „Local funkcji”. Sugerowana nazwa to "rzecz".
To nie robi różnicy, jeśli zmienię Thing
do tego:
function Thing(a, b) {
this.prop1 = a;
this.prop2 = b;
}
Podejrzewam, że tylko funkcje „publiczne” są uważane konstruktorów. Czy ktokolwiek wie, w jaki sposób ReSharper rozróżnia funkcję "Lokalny" i "Konstruktor"? Nawet lepiej, wiesz jak nadpisać to zachowanie?
Dzięki za znalezienie zgłoszenia błędu. Mam jednak pytanie: w jaki sposób poprzednia funkcja * nie * jest konstruktorem? Jeśli funkcja zwraca wartość przy wywołaniu z 'new', to zwrócona wartość staje się" tym "dla tworzonego obiektu. Plus, pisząc to w ten sposób, otrzymujesz taki sam wynik, niezależnie od tego, czy wywołasz go z 'new' czy bez. – Jacob
@Jacob, ponieważ nie tworzy obiektów 'Thing', zwraca obiekty obiektu' Object'. W JS konstruktor może zwrócić instancję dowolnej "klasy", a powracający literał obiektowy jest szczególnym przypadkiem, w którym funkcja ta umożliwia całkowite zanegowanie punktu konstruktorów i prototypów. – Esailija
Ma sens. Dziękuję za wyjaśnienie. – Jacob