Я следую руководству по использованию прототипа для определения методов объекта.Однако я все еще не могу передать свойство с помощью этого или
var _this = this;
Идея состоит в том, чтобы в main.js он создавал 4 переменные, которые все создают экземпляр объекта Task.В файле task.js, где определен мой объект задачи, он использует прототип для создания двух методов: завершения и сохранения, в каждом из которых пытаются распечатать свойство this._name объекта Task.
Прежде, чем я прочитал, люди упомянули проблему 'this', поэтому я попытался использовать
var _this = this
, поэтому в
prototype.complete()
должно быть новое слово "this", я прав?
Однако вывод ниже, я все еще получаю неопределенное.
Получение задания 1, завершающее задание: неопределенное
сохранение задания: неопределенное сохранение задания: неопределенное
сохранениезадача: undefined
Ниже приведен мой код
мой код script.js
var Task = function (data) {
this._name = data.name;
this._completed = data.completed;
};
Task.prototype.complete = () => {
var _this= this;
console.log('completing task: ' + _this._name);
this._completed = true;
};
Task.prototype.save = () => {
var _this= this;
console.log('saving task: ' + _this._name);
};
module.exports = Task;
мой main.js
var Task = require('./task');
var Repo = require('./taskRepo');
var task1 = new Task(Repo.get(1));
var task2 = new Task({name: 'create a demo for modules'});
var task3 = new Task({name:'create a demo for singletons'});
var task4 = new Task({name:'create a demo for prototypes'});
task1.complete();
task2.save();
task3.save();
task4.save();
my taskRepo.js
var repo = function () {
return {
get: function (id) {
console.log('Getting task ' + id);
return {
_name:'new task from db'
};
},
save: function(task){
console.log('Saving'+ task._name+'to the db');
}
};
};
module.exports = repo();