Первых два ваших вопроса возникли из-за незнания таких аспектов языка, как конструкторы (
https://learn.javascript.ru/constructor-new ) и прототипы (
https://learn.javascript.ru/prototypes ).
После прочтения материалов по приведенным выше ссылкам у вас, скорее всего, не должно остаться вопросов, но как поясняющий пример можно привести такой код:
function User(data) {
this.firstName = data.firstName;
this.lastName = data.lastName;
}
var bobMarley = new User({ // Скобки '{', т. к. передаем объект в качестве параметра
firstName: 'Bob',
lastName: 'Marley'
});
// Задаем прототипу метод, соответственно он появляется у всех экземпляров, созданных с помощью new User(), а не только у bobMarley, как было бы в случае присвоения метода напрямую bobMarley
User.prototype.getFullName = function() {
return `${this.firstName} ${this.lastName}`;
};
console.log(bobMarley.getFullName()); // Bob Marley
Что касается, последнего вопроса, нужно смотреть
соответствующее API.
В вашем случае это функция, которая устанавливает this функции, переданной в качестве первого параметра, значение второго параметра, например:
$.proxy(function() { console.log(this); }, {isExample: true })(); // Выведет {isExample: true}