我是JavaScript
的新手,我试图围绕constructor
函数和prototypes
打包。我有Ruby
的一些经验,所以当学习新的JS功能时,我尽量将它们等同于它们在Ruby
中类似的功能。在定义构造函数之后,是否可以将实例属性添加到JavaScript原型中?
对我来说,好像prototypes
类似于Ruby
类。所以我的问题是,是否可以使用className.prototype
命令将所需的属性添加到对象的实例中,还是有必要重新打开Ruby
中的class
/prototype
?
例如,说我有以下constructor
函数来创建一个汽车原型:
function Car (make,model,year) {
this.make = make;
this.model = model;
this.year = year;
}
,我创建了几个汽车:
myCar = new Car ("Honda", "Civic", 2015);
anotherCar = new Car ("Ford", "Focus", 2001);
现在让我们假设下来,我想新行Car的实例接受color
参数(即继承父项的color
属性)。是否有可能做类似以下的事情
Car.prototype.color = color;
这样,当一辆新车初始化,它会期望一个颜色参数被传递?也就是说,汽车constructor
功能现在应该(但没有我不得不改变了它自己):
function Car (make, model, year, color) {
this.make = make;
this.model = model;
this.year = year;
this.color = color;
}
,因此新的实例应该如下初始化:
aThirdCar = new Car("BMW","325",2008,"black");
或者,我必须回去到原来的constructor
功能并手动进行这些更改?
据我所知,使用className.prototype.methodName
是此功能的主要用途,以便所有实例共享一个方法,而不是使用它们自己的方法进行初始化。
我对这个功能的兴趣是为了我自己对JS可以做什么和不可以做什么以及应该做什么的兴趣。
谢谢。
不,不,构造函数不会“创建原型”。构造函数**有一个原型。 Ruby继承和JavaScript继承有很多不同之处。 – Pointy 2015-02-06 00:10:34
不,更改原型对象与构造函数的形式参数列表完全无关。在定义之后,你不能改变它。 – Pointy 2015-02-06 00:11:10
谢谢@Pointy,这是有益的,很高兴知道。 – 2015-02-06 00:17:10