添加方法作为原型(prototype)和在构造函数内部定义有什么区别
例如:之间
function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
this.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
}
和
function Car( model, year, miles ) {
this.model = model;
this.year = year;
this.miles = miles;
}
Car.prototype.toString = function () {
return this.model + " has done " + this.miles + " miles";
};
最佳答案
this.toSting
向使用Car
构造函数创建的每个新对象添加一个属性。Car.prototype
是一个单独的对象,所有使用new Car(...)
创建的对象都继承其属性。由于toString
是原型(prototype)对象的属性,因此所有Car
对象都会继承该属性。
让var car = new Car(...);
两者都可以通过调用car.toString()
来访问。
但是,当进行调用时,首先会在 car 中搜索 toString
属性。如果不存在,则在原型(prototype)中搜索 toString
并调用它。如果两者都不存在,则沿着链向上搜索原型(prototype)原型(prototype),直到在基础对象原型(prototype)上找到 toString
。
关于JavaScript 原型(prototype)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34525204/