Я могу привести один пример, где это полезно. Долгое время, за go до ES6, добиться наследования javascript было немного сложнее - было два типа наследования. Таким образом, чтобы создать один класс и наследовать его с другим классом, вы должны были сделать что-то вроде этого:
function Parent(){
this.parentParam="parentParam";
};
Parent.prototype.logThisContext = function(){
console.log(this);
};
function Child(){
Parent.call(this);
};
Child.prototype = Object.create(Parent.prototype);
Теперь, если вы хотите переопределить родительскую функцию logThisContext
, вы должны написать это:
Child.prototype.logThisContext = function(){
// calling base functionality
Parent.prototype.logThisContext.call(this);
// add child functionality
console.log("overriden behavior");
}
Если вы не вызовете logThisContext
с this
, вы запишете сам прототип вместо конкретного экземпляра.
Вы можете поиграть с этим кодом, удалив вызов this
и вы сами увидите разницу :)
РЕДАКТИРОВАТЬ: Я не уверен, дает ли это вам ответ, который вы хотите, но технически функция logThisContext
внутри объекта, как вы упомянули в своем ответе.