我是JavaScript
的新手,我正试图了解constructor
函数和prototypes
。我对Ruby
有一些经验,所以在学习新的JS功能时,如果可能的话,我会尝试将它们等同于Ruby
中类似的功能。
在我看来,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;
这样,当一辆新车被初始化时,它会期望传递一个颜色参数吗?也就是说,Car 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可以做什么和不能做什么,以及可以做什么与应该做什么。
谢谢。
您应该能够使用prototype定义一个新方法,但不确定是否可以更改输入参数编号。
car.protype.color=函数(){return"红色"}
在ruby中,您既可以更改参数的数量,也可以使用元编程定义新方法
ruby_object(*args)ruby_object.define_method()