Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用.call()调用原型函数_Javascript - Fatal编程技术网

Javascript 使用.call()调用原型函数

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

我正在观看一个关于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(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
访问它。谢谢。现在有道理了。如果还有什么不清楚的地方,请告诉我们。