如何从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中使用了相同的属性
以及另一个属性。错误似乎来自后者。这是一个完全不同的问题,因此我将接受您对当前问题的回答:)