2015-02-06 57 views
2

我是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可以做什么和不可以做什么以及应该做什么的兴趣。

谢谢。

+2

不,不,构造函数不会“创建原型”。构造函数**有一个原型。 Ruby继承和JavaScript继承有很多不同之处。 – Pointy 2015-02-06 00:10:34

+2

不,更改原型对象与构造函数的形式参数列表完全无关。在定义之后,你不能改变它。 – Pointy 2015-02-06 00:11:10

+0

谢谢@Pointy,这是有益的,很高兴知道。 – 2015-02-06 00:17:10

回答

0

您应该能够使用原型定义新方法,但不知道是否可以更改输入参数编号。

car.protype.color =函数(){ 返回 “红色” }

在红宝石你既可以改变的参数数量以及使用metaprogrammimg

ruby​​_object定义一个新的方法(* args) ruby​​_object.define_method()

相关问题