努力理解为什么我的"这个"实现不起作用?



我正在练习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

最新更新