首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么不能向对象构造函数添加新属性,就像向现有对象添加新属性一样?

为什么不能向对象构造函数添加新属性,就像向现有对象添加新属性一样?
EN

Stack Overflow用户
提问于 2019-07-15 10:10:41
回答 2查看 605关注 0票数 1

我在javascript中有一个函数。

代码语言:javascript
运行
复制
function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    this.name = function() {return this.firstName + " " + this.lastName;};
}

为什么不能像这样在javascript中向构造函数添加一个属性呢?

代码语言:javascript
运行
复制
Person.hairColor = "black";

我们可以像这样轻松地为对象添加一个属性。

代码语言:javascript
运行
复制
myPerson = new Person("firstName","lastName",23,"brown");
myPerson.hairColor = "black";

为什么第一个不可能,为什么javascript限制将属性添加到构造函数中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-15 10:22:47

如果将属性分配给Person.hairColor,则只能通过Person.hairColor访问该属性,并且它不会继承到实例,因为实例继承自Person.prototype。因此,如果您向它添加了一个属性,例如Person.prototype.hairColor,那么它将被继承,并且可以通过实例(myPerson.hairColor)访问。

请注意,设置myPerson.hairColor不会更改原型中的值,但会在实例上创建一个新属性,例如:

代码语言:javascript
运行
复制
  myPerson.hairColor += " and brown";
  console.log(
     Person.prototype.hairColor, // "black"
     myPerson.hairColor, // "black and brown"
  );
票数 1
EN

Stack Overflow用户

发布于 2019-07-15 10:21:40

您可以使用prototype添加。示例:

代码语言:javascript
运行
复制
function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor;
    this.name = function() {return this.firstName + " " + this.lastName};
}

Person.prototype.hairColor = "black";

myPerson = new Person("firstName","lastName",23,"brown");
console.log(myPerson.hairColor); // black
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57037585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档