В первом случае объект, построенный с new RobsObject()
, имеет функции _onSubmit()
, _onSuccess()
в качестве своих свойств. Это так называемые публичные функции объекта.
Во втором случае эти функции не являются свойствами new RobsObject()
. Тем не менее, они будут видны для любой из «публичных» функций (в вашем случае их нет). По сути, они являются частными функциями.
Однако, если вы написали свой второй фрагмент таким образом ...
RobsObject = function(data){
this.instanceID = data.instanceID;
this._formButton = document.getElementById('formSubmit_' + this.instanceID);
if(this._formButton)
{
//set a click listener that
//points to this._onSubmit, this._onSuccess, and this.onFailure
}
this._onSubmit = function(type, args)
{
//make an ajax call
}
this._onSuccess = function(type, args)
{
//display data on the page
}
this._onFailure = function(type, args)
{
//show an alert of some kind
}
};
результат тот же.
Важное различие между этими двумя соглашениями заключается в том, что в первом методе вы не можете определить частные функции, которые могут совместно использоваться многими общими функциями, как вы делаете во втором методе. Литерал Object, используемый для определения прототипа, не образует замыкания как тело функции.
Например,
function MyConstructor() {
var myPrivate = function() {
}
this.myPublic1 = function() {
myPrivate();
}
this.myPublic2 = function() {
myPrivate();
}
}
myPrivate()
- это функция, видимая обеим общедоступным функциям.