Javascript 使用.call()调用原型函数
我正在观看一个关于JS设计模式的课程,其中一个示例中有以下代码:Javascript 使用.call()调用原型函数,javascript,Javascript,我正在观看一个关于JS设计模式的课程,其中一个示例中有以下代码: var Task = function (name) { this.name = name; this.completed = false; } Task.prototype.save = function () { console.log('saving Task: ' + this.name); }; var UrgentTask = function (name, priority) { Task.call(thi
var Task = function (name) {
this.name = name;
this.completed = false;
}
Task.prototype.save = function () {
console.log('saving Task: ' + this.name);
};
var UrgentTask = function (name, priority) {
Task.call(this, name);
this.priority = priority;
};
UrgentTask.prototype = Object.create(Task.prototype);
UrgentTask.prototype.save = function () {
console.log('do special stuff before saving');
//why use Task.prototype.save and not Task.save directly.
Task.prototype.save.call(this);
};
var ut = new UrgentTask('This is urgent', 1);
ut.save();
我的问题是,为什么在UrgentTask.prototype.save函数中,我必须使用Task.prototype.save,而不是使用.call()方法直接使用Task.prototype.save?
为什么使用Task.save返回无法读取未定义的属性'call'?
Task
是一个构造函数函数(typeof Task=='function'
)<代码>任务。保存必须是任务
构造函数的属性。但您永远不会在构造函数上创建该属性。您可以在Task.prototype
上创建save
属性。因此,您只能通过Task.prototype.save
访问它。谢谢。现在有道理了。如果还有什么不清楚的地方,请告诉我们。