2013-03-18 2 views
9

Ich bin in die tatsächliche objektorientierte Programmierung mit JavaScript und ich habe auf zwei verschiedene Arten der Erweiterung des Prototyps eines vorhandenen Objekts laufen.Was ist der Unterschied zwischen _.extend (Something.prototype, someObj) und Something.prototype.someFunc = someFunc?

Methode eins:

Something.prototype.someFunc = function() { 
    // To something usefull 
} 

Methode zwei (mit Underscore.js):

_.extend(Something.prototype, { 
    someFunc: function() { 
     // Do the same but differently 
    } 
} 

Was ist der Unterschied zwischen diesen beiden Ansätzen? Welcher gilt als "besser"? Für mich sieht es so aus, als ob die erste Methode besser ist, weil sie einfaches JavaScript verwendet, und die zweite Methode ist die Implementierung von jemand anderem. Aber andererseits haben die Entwickler von underscore.js die Methode _.extend() sicher nicht umsonst hinzugefügt?

Antwort

6

Sie sind funktional gleichwertig. Im Falle einer einzelnen Methode, denke ich, Methode 1 ist besser lesbar, aber im Fall von mehreren Methoden zum gleichen Prototyp hinzugefügt, könnte Methode zwei besser lesbar sein (das ist natürlich subjektiv).

RE: Die Underscore.js Entwickler haben sicherlich nicht die _.extend() -Methode für nichts hinzufügen:

_.extend hat andere Verwendungen, wie Standardoptionen:

function (options) { 
    options = _.extend({ height: 80, width: 20 }, options); 
    ... 
}