我是 JavaScript
的新手,我正在努力研究 constructor
函数和 prototypes
。我有一些使用 Ruby
的经验,所以在学习新的 JS 功能时,如果可能的话,我会尽量将它们等同于它们在 Ruby
中的类似功能。
对我来说,原型(prototype)
类似于Ruby
类。所以我的问题是,是否可以使用 className.prototype
命令向对象的实例添加所需的属性,或者是否有必要重新打开 class
/prototype
就像在 Ruby
中一样?
例如,假设我有以下 constructor
函数来创建 Car 原型(prototype):
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 = function() { 返回“红色”
在 ruby 中,您既可以更改参数数量,也可以使用 metaprogrammimg 定义新方法
ruby 对象(*参数) ruby_object.define_method()
关于javascript - 在定义构造函数后,实例属性可以添加到 JavaScript 原型(prototype)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28356415/