作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我了解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
会引发错误无法将 undefined 或 null 转换为对象
最佳答案
使用this.
:
MyClass.prototype.myFunction = function myFunction() {
const x = this.myProperty[Object.keys(this.myProperty)[0]] + 10;
// -------^^^^^-----------------------^^^^^
return x;
};
这将从对象中获取属性。如果对象没有自己的属性副本,它将从对象的原型(prototype)中获取它。
或者,如果您每次都想从原型(prototype)中获取它,请明确说明:
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
要在原型(prototype)上,您仍然需要以“笨拙”的方式分配它。但您可能想在构造函数中创建该属性。
旁注 2:除非您更改 myProperty
稍后,我强烈建议使用 this.myProperty.key1
或this.myProperty.key2
并且不使用 this.myProperty[Object.keys(this.myProperty)[0]]
,这很难阅读,困惑(未定义的行为,Object.keys
返回的键的顺序没有指定,即使在ES2015中也没有),并且需要额外的工作。
关于javascript - 如何从 javascript 类中访问原型(prototype)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40111763/
我是一名优秀的程序员,十分优秀!