通常,原型用于在它们上面放置函数/方法,而不是属性,因为使用属性时,您将在所有对象实例之间共享单个属性值。此外,如果您在构造函数中添加方法,您可能不需要为继承设置原型。例如:
function Employee(name) {
this.name = "";
this.dept = "general";
this.reportName = function() {return this.name};
}
function Manager(name) {
Employee.call(this, name);
this.reports = [];
}
var manager = new Manager('Peter');
manager.reportName(); // Peter
然而,对象的构造内添加方法/功能是低效的,因为每次构造函数被调用创建函数的一个实例。所以通常情况下,所有的方法,而不是属性,是在原型分配是这样的:现在
function Employee(name) {
this.name = "";
this.dept = "general";
}
Employee.prototype.reportName = function() {return this.name};
,在这种情况下,简单地调用构造函数是不够的:
function Manager(name) {
Employee.call(this, name);
this.reports = [];
}
var manager = new Manager('Peter');
manager.reportName(); // throws an error
您需要设置一个原型:
Manager.prototype = Object.create(Employee.prototype)
var manager = new Manager('Peter');
manager.reportName(); // 'Peter'
尝试'新的经理()instanceof员工'没有它,或尝试把东西放在'员工'的原型。 – Ryan