我遵循使用原型定义对象方法的教程。但是,我仍然无法使用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();
答案 0 :(得分:0)
问题是您正在使用箭头功能。函数中的this是全局含义窗口的this。