В объектно-ориентированных языках на основе классов одним из преимуществ объектов является инкапсуляция: каждый метод объекта имеет доступ к данным объекта.Методы объектов против функций и инкапсуляции в JavaScript
В JavaScript это преимущество инкапсуляции не похоже на то, что связано с функцией this
.
В нижеприведенном примере method1
есть доступ к this
без дополнительного переплета, но method2
нет.
Есть ли какая-либо причина использовать метод объекта вместо обычной функции в приведенном ниже примере, если нам нужно bind
как method2
и function2
для того, чтобы иметь доступ к this.args
внутри них?
// service declaration
function Service(args) {
this.args = args;
}
Service.prototype.method1 = function(query) {
............
let res1 = service2.get(query).map(this.method2.bind(this)); // option 1
let res2 = service2.get(query).map(function2.bind(this)); // option 2
............
};
Service.prototype.method2 = function(data) {
// use args from 'this'
}
function function2(data) {
// use args from 'this'
}
// service use
let service = new Service(args);
service.method1(req.query).
что _document (данные) _? Что такое _service2_? У вас есть менее надуманный пример? Я не понимаю, что вы пытаетесь сделать. – Mathletics
Я согласен с комментарием выше - что такое 'document (data)'? – unobf
Очевидным преимуществом было бы вызывать 'service.method2()' вместо 'function2.call (service)', когда нет необходимости связываться (где нет большой разницы) – Bergi