Numer () i touppercase () zarówno wyglądają jak funkcje, ale nie mogą być napisane w ten sam sposób. Muszę brakować oczywistej koncepcji, ale nie wiem, co to jest.

Na przykład następujący kod działa idealnie.

var a = "cat";
var b = "dog";
console.log(a.toUpperCase() + b.toUpperCase());

Rezultatem jest Catdog.

Ale ten kod rzuca błąd.

var a = 5;
var b = 10;
console.log(a.Number() + b.Number());

a.Number is not a function

A jednak kiedy numer Google () jest wymieniony jako funkcja.

Funkcja numeru JavaScript

Co ciekawe, gdy odwrócę mój kod, rzuca błąd.

a = "cat";
b = "dog";

console.log(toUpperCase(a) + toUpperCase(b));

toUpperCase is not defined

Numer () odwrócony również działa dobrze.

a = 5;
b = 10;

console.log(Number(a) + Number(b));
1
DR01D 25 czerwiec 2017, 20:14

3 odpowiedzi

Najlepsza odpowiedź

Powinieneś przeczytać coś o OOP (programowanie obiektowo-zorientowane).

Tak, Number jest funkcją, ale {x1}} (co oznacza int.Number) nie jest. Kiedy piszesz a.Number(), dzwonisz do funkcji Number obiektu a i to nie działa, ponieważ typ danych {{x 6}} (a zmienna) nie ma funkcjonować.

Edytuj: (Chodzi o OOP w Ogólnie, a nie specyficzny dla JavaScript)

Number Funkcja jest funkcją globalną , która jest rodzajem podstawy dowolnego programowania / skryptów. Jest gdzieś zdefiniowany i możesz go nazwać gdzie indziej. Dodatkowo możesz przekazać argumenty i może zwrócić pewną wartość. Na przykład:

function getHigherNumber(num) {
    return num + 1;
}

var foo = 5;
console.log(getHigherNumber(foo)); // writes "6"

Funkcja Getherginumber wymaga numeru jako argument i zwraca go o jeden.

A potem są metody , które nie są globalne, ale powiązane tylko do danych / klasy, w których są zdefiniowane. Na przykład string.toUpperCase(). Tutaj "String" jest prymitywnym typem danych, który również definiuje niektóre metody (tj. toUpperCase). Następnie tworzysz obiekt var bar = "some text"; i zadzwoń na niej metodę: bar.toUpperCase() Zwolnij kropkę . między obiektem a jego metodą, którą dzwonisz.

Mam nadzieję, że teraz lepiej to rozumiesz, jeśli niektóre z moich interpretacji nie są całkowicie dokładne.

1
Martin Heralecký 25 czerwiec 2017, 17:49

Jak widać w opublikowanym linku, odnosi się do funkcji i nie metody. Możesz użyć metody na obiekcie, który jej zapewnia.

Na przykład:

toUpperCase jest metodą, ponieważ jest dostarczany w string.prototype. Więc możesz użyć

"Prova".toUppercase();

Ponieważ "Prova" dziedziczy metodę ze string.prototyp

toFixed jest metodą, ponieważ jest dostarczany w nume.prototype. Więc możesz użyć w ten sposób

var x = 9.656;
x.toFixed(0);   

Funkcja wygląda jak prosta definicja bloku kodu:

function myUpperCase(myString) {
   return myString.toUpperCase(myString);
}

Następnie w swoim kodzie możesz go użyć w ten sposób:

myUpperCase("cat");
1
cirosomma 25 czerwiec 2017, 17:42
String.prototype.toUpperCase();

Jest funkcją wbudowaną w prototyp smyczkowy jako metoda. Dlatego nazywa się następującą składnię:

String.toUpperCase();

Z drugiej strony,

Number();

Jest funkcją, która jest natywnie wbudowana w język JavaScript. Ponieważ nie jest zdefiniowany jako metoda, nie jest wywoływana jako jeden po wywołaniu.

1
elqueso101 25 czerwiec 2017, 17:34