原型甚至无法创建新的“ this”也无法传递属性值

时间:2018-10-10 15:03:47

标签: javascript node.js scope this prototype

我遵循使用原型定义对象方法的教程。但是,我仍然无法使用this或

传递属性
var _this = this;

这个想法是,在main.js中,它创建4个变量,这些变量都实例化Task对象。在task.js是我的任务对象定义的地方,它使用原型创建两个方法(完成并保存),分别尝试打印出Task对象的this._name属性。

在我读到人们提到“这个”问题之前,我尝试使用

var _this = this 

prototype.complete()

应该有一个新的“ this”,对吗?

但是输出如下,我仍然不确定。

获取任务1 完成任务:未定义
保存任务:未定义 保存任务:未定义
保存任务:未定义

下面是我的代码

  

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

我的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 :(得分:0)

问题是您正在使用箭头功能。函数中的this是全局含义窗口的this。