如何从javascript类中访问prototype属性?

如何从javascript类中访问prototype属性?,javascript,prototype,Javascript,Prototype,大家都知道我会javascript,请原谅我的基本问题。 如何在类中使用属性,如下面的示例代码中所示 function MyClass() { // nothing special } MyClass.prototype.myProperty = { key1: 'some value 1', key2: 'some value 2', }; My Class.prototype.myFunction = function myFunction() { // I need t

大家都知道我会
javascript
,请原谅我的基本问题。 如何在类中使用属性,如下面的示例代码中所示

function MyClass() {
  // nothing special
}

MyClass.prototype.myProperty = {
  key1: 'some value 1',
  key2: 'some value 2',
};

My Class.prototype.myFunction = function myFunction() {
  // I need to retrieve the first value of myProperty
  const x = myProperty[Object.keys(myProperty)[0]] + 10; // won't work
  return x;
};

module.exports = MyClass;

使用
this.myProperty
抛出错误
无法将未定义或null转换为对象
使用
this.

MyClass.prototype.myFunction = function myFunction() {
  const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10;
  // -------^^^^^-----------------------^^^^^
  return x;
};
这将从对象获取属性。如果对象没有自己的属性副本,它将从对象的原型中获取它

或者,如果您每次都想从原型中获得它,请明确:

MyClass.prototype.myFunction = function myFunction() {
  const p = MyClass.prototype.myProperty;
  const x = p[Object.keys(p)[0]] + 10;
  return x;
};

旁注:
const
是一个新事物,从ES2015开始。如果您使用的是ES2015(看起来您使用的是NodeJS,这意味着如果您使用的是v6或更高版本,您可以使用NodeJS),您可以更简单地使用
class
notation编写您的类:

class MyClass {
  constructor() {
    // nothing special
  }
  myFunction() {
    const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10;
    return x;
  }
}
MyClass.prototype.myProperty = {
  key1: 'some value 1',
  key2: 'some value 2',
};

module.exports = MyClass;
请注意,如果希望
myProperty
出现在原型上,则仍然需要将其指定为“笨重”方式。但是您可能希望在构造函数中创建该属性



旁注2:除非您以后更改
myProperty
,否则我强烈建议您使用
this.myProperty.key1
this.myProperty.key2
,而不要使用
this.myProperty[Object.keys(this.myProperty)[0]
,因为它很难读取,所以很混乱(未定义的行为,由
对象返回的键的顺序。键
未指定,甚至在ES2015中也未指定),以及额外的工作。

使用
此项。

MyClass.prototype.myFunction = function myFunction() {
  const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10;
  // -------^^^^^-----------------------^^^^^
  return x;
};
这将从对象中获取属性。如果对象没有自己的属性副本,它将从对象的原型中获取属性

或者,如果您每次都想从原型中获得它,请明确:

MyClass.prototype.myFunction = function myFunction() {
  const p = MyClass.prototype.myProperty;
  const x = p[Object.keys(p)[0]] + 10;
  return x;
};

旁注:
const
是一个新事物,从ES2015开始。如果您使用ES2015(看起来您使用的是NodeJS,这意味着如果您使用的是v6或更高版本,您可以这样做),您可以更简单地使用
class
符号编写类:

class MyClass {
  constructor() {
    // nothing special
  }
  myFunction() {
    const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10;
    return x;
  }
}
MyClass.prototype.myProperty = {
  key1: 'some value 1',
  key2: 'some value 2',
};

module.exports = MyClass;
请注意,如果希望
myProperty
出现在原型上,您仍然需要以“笨重”的方式分配它。但是您可能希望在构造函数中创建该属性



旁注2:除非您以后更改
myProperty
,否则我强烈建议您使用
this.myProperty.key1
this.myProperty.key2
,而不要使用
this.myProperty[Object.keys(this.myProperty)[0]
,因为它很难读取,所以很混乱(未定义的行为,未指定
对象返回的键的顺序。键
未指定,即使在ES2015中也未指定),还有额外的工作。

很抱歉,我更新了我的问题,使你答案中的示例无效!但似乎
这个。myProperty
未定义的
。我猜是因为我从未
新建过这个类???@Yalda:展示你是如何使用它的。我想我更接近于找出问题所在。实际上,我使用了相同的属性在
myFunction
中的y以及另一个属性。似乎错误来自后者。这是一个完全不同的问题,因此我将接受您对当前问题的回答:)抱歉,我更新了我的问题,以某种方式使您答案中的示例无效!但似乎
this.myProperty
未定义的
。我猜是因为我从未
新建过该类???@Yalda:展示您如何使用它。我想我更接近于找出问题所在。实际上,我在
myFunction中使用了相同的属性
以及另一个属性。错误似乎来自后者。这是一个完全不同的问题,因此我将接受您对当前问题的回答:)