Both are clever solutions.
It's worth noting that the above methods have three drawbacks though:
2. The nice part about functions that are added to the prototype object is that only one function exists across all instances, instead of each instance having its own copy of the function. In this case, however, a copy of the observable function will be created for each instance of the SiteModel that is instantiated.
3. The other nice part about functions that are added to the prototype object is all instances of the object will be able to use them, even if those instances were instantiated before the method was added to the prototype object. However, all methods added to the SiteModel.prototype will not be converted to computed functions on all already-existing instances of SiteModel, since that conversion happens in the constructor. Depending on when you define the function on the prototype object and when you instantiate your object, you may or may not have that computed function available on your object.
Truthfully, I don't see any advantage to defining functions on the prototype. You end up creating copies of the function anyway, and you just make your code more confusing.