прототип не может передать значение свойства, даже создать новое «это» - PullRequest
0 голосов
/ 10 октября 2018

Я следую руководству по использованию прототипа для определения методов объекта.Однако я все еще не могу передать свойство с помощью этого или

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();

1 Ответ

0 голосов
/ 10 октября 2018

Проблема в том, что вы используете функцию стрелки.Это в функции это окно глобального значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...