我希望.cName
属性更改时,.c
属性的值会自动更改。
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
}
// my new "class" object
function JimsObject(a, b, c, d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.cName = NameList[c];
}
var jimbo = new JimsObject();
jimbo.a = 48;
jimbo.b = "blah";
jimbo.c = 2;
console.log( jimbo.cName );
// Wanting output of 'Twice'
Twice
对于JavaScript来说还不是很新。任何帮助将不胜感激!
答案 0 :(得分:0)
执行该函数时,您不会给该函数任何参数,因此它们都是未定义的,因此我认为您在构造类时会遇到一些错误。
您必须在函数参数中传递变量。
var jimbo = new JimsObject(48, "blah", 2);
加上第四个参数d
,尽管您似乎在任何地方都没有使用它。
还要考虑为变量赋予更有意义的名称!
进一步,考虑使用数组而不是对象!不过,您必须从0开始而不是1开始。
const NameList = [ "Once", "Twice", "Thrice" ];
NameList[0]
将返回Once
。
答案 1 :(得分:0)
除非使用代理,否则您将无法听取javascript对象中原始值的变化,这对初学者来说很复杂,因此替代方法是在类中使用setter函数。
您可以这样做:
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
}
// my new "class" object
function JimsObject(a, b, c, d) {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.cName = NameList[c];
}
JimsObject.prototype.setC = function (value) {
this.c = value;
this.cName = NameList[value];
}
var jimbo = new JimsObject();
jimbo.a = 48;
jimbo.b = "blah";
jimbo.setC(2);
document.write(jimbo.cName);
// Wanting output of 'Twice'
更改该属性的值时,也可以使用Object.defineProperty
来调用setter。
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
}
// my new "class" object
function JimsObject(a, b, c, d) {
this.a = a;
this.b = b;
this._c = c;
this.d = d;
this.cName = NameList[c];
}
Object.defineProperty(JimsObject.prototype, "c", {
get: function() {
return this._c;
},
set: function(value) {
this._c = value;
this.cName = NameList[value];
}
});
var jimbo = new JimsObject();
jimbo.a = 48;
jimbo.b = "blah";
jimbo.c = 2;
document.write(jimbo.cName);
// Wanting output of 'Twice'
答案 2 :(得分:0)
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
}
// my new "class" object
function JimsObject(a, b, c, d) {
this.a = a;
this.b = b;
let cVal = c;
let that = this;
Object.defineProperty(this, 'c', {
get(){
return cVal;
},
set(newVal){
cVal = newVal;
that.cName= NameList[cVal];
return cVal;
}
});
this.d = d;
this.cName = NameList[c];
}
var jimbo = new JimsObject();
jimbo.a = 48;
jimbo.b = "blah";
jimbo.c = 2;
console.log(jimbo.cName);
您还只能为cName
属性定义一个吸气剂。
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
}
// my new "class" object
function JimsObject(a, b, c, d) {
this.a = a;
this.b = b;
this.c = c;
let that = this;
Object.defineProperty(this, 'cName', {
get(){
return NameList[that.c];
}
});
this.d = d;
}
var jimbo = new JimsObject();
jimbo.a = 48;
jimbo.b = "blah";
jimbo.c = 2;
console.log(jimbo.cName);
答案 3 :(得分:0)
您可以创建一个类jimObject
const NameList = {
1: 'Once',
2: 'Twice',
3: 'Thrice'
};
class JimObject {
constructor(a, b, c, NameList){
this.a = a;
this.b = b;
this.c = c;
this.cName = NameList[c];
}
get name(){
return this.cName
}
}
let jimbo = new JimObject(48, 'blah', 2, NameList);
console.log(jimbo);
console.log(jimbo.name);