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