在定义了构造函数之后,是否可以将实例属性添加到JavaScript原型中

Can instance properties be added to a JavaScript prototype after a constructor function has been defined?

本文关键字:添加 属性 实例 JavaScript 原型 构造函数 定义 之后 是否      更新时间:2023-09-26

我是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()