如何从javascript类中访问原型属性?

时间:2016-10-18 15:02:39

标签: 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 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会引发错误Cannot convert undefined or null to object

1 个答案:

答案 0 :(得分:3)

使用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或更高版本),您可以使用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.key1this.myProperty.key2,而不要使用难以阅读的this.myProperty[Object.keys(this.myProperty)[0]],这应该是混乱的(未定义)行为,Object.keys返回的键的顺序没有指定,即使在ES2015中也没有指定),以及额外的工作。