2012-03-14 11 views

Odpowiedz

32

Metoda Date.prototype.getTime zwraca liczbę milisekund od epoki (1970-01-01T00: 00: 00Z); jest unikalny dla typu Date i ważnej metody.

Urządzenie Object.prototype.valueOf method służy do uzyskania "wartości pierwotnej" dowolnego obiektu. W przypadku klasy Date wygodnie jest użyć atrybutu "time" (wartość zwrócona przez getTime()) jako jego prymitywną formę, ponieważ jest to zwykła reprezentacja dat. Ponadto pozwala używać operatorów arytmetycznych na obiektach z datami, dzięki czemu można je porównać za pomocą operatorów porównania (<, <=, >, itp.).

var d = new Date(); 
d.getTime(); // => 1331759119227 
d.valueOf(); // => 1331759119227 
+d; // => 1331759119227 (implicitly calls "valueOf") 
var d2 = new Date(); 
(d < d2); // => true (d came before d2) 

Zauważ, że można wdrożyć „valueOf” metodę dla własnych typów robić ciekawe rzeczy:

function Person(name, age) {this.name=name; this.age=age;} 
Person.prototype.valueOf = function() {return this.age; } 

var youngster = new Person('Jimmy', 12); 
var oldtimer = new Person('Hank', 73); 
(youngster < oldtimer); // => true 
youngster + oldtimer; // => 85 
+2

Należy pamiętać, że '+ d' to nie to samo co' 0 + d'. Ten ostatni konwertuje datę na ciąg. – user502144

+0

Jestem pewna, że ​​jest to znakomicie dobra odpowiedź, ale wciąż jest dla mnie trochę niewyraźna. Czy byłbyś w stanie trochę rozwinąć? Jestem zdezorientowany przez "uzyskać" typ pierwotny "" i "czas ... jak to jest" prymitywna forma "". Jak to jest rozróżnienie między 'getTime()' i 'valueOf()'? A więc, co oznacza "skalowana" reprezentacja? Dziękuję Ci. – Karl

+2

@Karl, jedynym celem 'getTime()' jest zwrócenie liczby milisekund od północy 01 stycznia, 1970 UTC. Natomiast "valueOf()" zwraca pojedynczą wartość - może to być łańcuch, liczba, ale nie klasa obiektu - stąd typ prymitywny. Coś, co może być użyte do porównań, numeryczne przedstawienie. Sądzę, że projektanci języków myśleli, że można już użyć 'getTime()' w tym celu i po prostu go użyli. Mogło być inaczej, ale dla wygody użyli 'getTime()'. –

3

valueOf to metoda wszystkich obiektów. Obiekty mogą zastąpić to, czego chcą.

+7

Ma to sens, jeśli weźmiemy pod uwagę, że getTime został wprowadzony w JavaScript 1.0, a valueOf został wprowadzony w JavaScript 1.1. Domyślam się, że getTime został zachowany dla zapewnienia zgodności wstecznej. – kahoon

Powiązane problemy