2016-07-20 9 views
2

Ich vor kurzem auf Lodash 3.10.1 aktualisiert und ich bemerkte etwas merkwürdig.Javascript-Abteilung auf Lodash Wrapper Objekt

sagen, dass ich eine Reihe von Zahlen haben, und ich möchte das Maximum in der Anordnung erhalten dann die Hälfte:

var series = [ 6, 8, 2 ]; 

var highestTotal = _.chain(series) 
        .max(); 

console.log('highestTotal is ', highestTotal); 

var halved = highestTotal/2; 

console.log('halved is ', halved); 

ich dies auf einen Fehler als highestTotal geworfen hätte gedacht hätte ist ein Lodash Wrapper. I.e. Ich würde havbe dachte, es ist notwendig zu tun:

var halved = highestTotal.value()/2; 

für sie zu arbeiten. Aber es ist nicht! Wie läuft das ab?

Jsfiddle ist here.

Antwort

2

Das ist, weil lodash Wrapper-Objekt eine .valueOf-Methode (die Alias ​​zu .value ist) und automatisch von JavaScript aufgerufen wird, wenn ein primitiver Wert erwartet wird (z. B. in einer arithmetischen Operation).

From the MDN:

function myNumberType(n) { 
    this.number = n; 
} 

myNumberType.prototype.valueOf = function() { 
    return this.number; 
}; 

myObj = new myNumberType(4); 
myObj + 3; // 7