我正在练习this
,我写了一些代码。
我的目标是使this.MemberName
成为Tracey,并理解为什么我目前的尝试不起作用。
当我把对象名称和点符号放在变量assessment
之前时,我得到了一个错误。
function family(emotion) {
return function person() {
console.log(
`The core emotion that ${ this.MemberName } display's is ${ emotion }`
);
};
}
var tracey = {
MemberName: "Tracey",
age: 0,
DOB: "29 September 2021",
};
var assessment = family("happy");
tracey.assessment();
我想你是想设置tracey
对象的assessment
属性。
你的错误与你使用this
无关,而是你在尝试调用assessment
属性之前没有设置它。
你的代码应该是这样的:
function family(emotion) {
return function person() {
console.log(
`The core emotion that ${ this.MemberName } display's is ${ emotion }`
);
};
}
var tracey = {
MemberName: "Tracey",
age: 0,
DOB: "29 September 2021",
};
tracey.assessment = family("happy");
tracey.assessment();
lejlun的答案是正确的
如果可以,可以将属性直接赋值给对象
var tracey = {
MemberName: "Tracey",
age: 0,
DOB: "29 September 2021",
assessment: function(emotion){
console.log(
`The core emotion that ${ this.MemberName } displays is ${ emotion }`
);
}
}
tracey.assessment('happy')
如果你想在tracey
上调用assessment()
而不将其作为属性赋值,你可以像下面这样使用Function.prototype.apply传递person()
方法应该使用的范围作为'this':
function family(emotion) {
return function person() {
console.log(
`The core emotion that ${ this.MemberName } displays is ${ emotion }`
);
};
}
var tracey = {
MemberName: "Tracey",
age: 0,
DOB: "29 September 2021",
};
function assessment(somePerson, emotion) {
// family returns person()
// we pass somePerson as 'this' to person()
family(emotion).apply(somePerson);
}
assessment(tracey, 'happy');
为什么你的代码不工作:
function family(emotion) {/*...*/}
var tracey = {/*...*/};
// assessment is assigned to the global scope,
// the same scope where family and tracey reside
var assessment = family("happy");
// we try to call a property of tracey called assessment
tracey.assessment();
// Uncaught TypeError: tracey.assessment is not a function
console.log(tracey.assessment);
// undefined