Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 嵌套函数:调用时输出“未定义”的函数_Javascript - Fatal编程技术网

Javascript 嵌套函数:调用时输出“未定义”的函数

Javascript 嵌套函数:调用时输出“未定义”的函数,javascript,Javascript,我制作了一个箭头函数,如下所示,嵌套在getdata函数中,当我调用getdata函数时,它输出undefined,我做错了什么 let person={ 姓名:“马里奥”, 年龄:30,, 工资:5555, getdata:函数(){ 欢迎=()=>{ return`hello:${this.name}您的年龄是${this.salary}` }; }, } console.log(person.getdata())我想你是有意这么做的 let person = { name: &q

我制作了一个箭头函数,如下所示,嵌套在
getdata
函数中,当我调用
getdata
函数时,它输出
undefined
,我做错了什么

let person={
姓名:“马里奥”,
年龄:30,,
工资:5555,
getdata:函数(){
欢迎=()=>{
return`hello:${this.name}您的年龄是${this.salary}`
};
},
}

console.log(person.getdata())
我想你是有意这么做的

let person = {
    name: "Mario",
    age: 30,
    salary: 5555,
    getdata:  () => {
            return `hello: ${this.name} your age is ${this.salary}`
        };
}
这将返回所需的结果:

person.getdata().welcome()
由于
getData()
只是一个定义了另一个函数但不返回任何内容的函数,因此调用它的返回值是
undefined
。但是,如果删除嵌套函数,只返回所需的数据,则会得到一个返回值:

let person={
姓名:“马里奥”,
年龄:30,,
工资:5555,
getdata:函数(){
return`hello:${this.name}您的年龄是${this.salary}`
},
}

console.log(person.getdata())不能在静态对象中传递上下文, 解决问题的最佳模式是使用js类:

班级人员{
建造师(数据){
this.info=数据;
}
欢迎{
return`hello:${this.info.name}您的年龄是${this.info.age}`
}
getSalary(){
返回此.info.salary;
}
getAge(){
返回此.info.age;
}
}
var mario={
姓名:“马里奥”,
年龄:30,,
工资:5555,
}
var数据=新人(马里奥);
log(data.welcome());
log(data.getSalary());
console.log(data.getAge())这是因为
getdata()
没有返回任何内容。它只有一个嵌套函数。如果您只想返回welcome的内容,那么这就是您要放置的内容

let person = {
    name: "Mario",
    age: 30,
    salary: 5555,
    getdata: function () {
          return `hello: ${this.name} your age is ${this.salary}`
    }
}

问题是getdata函数不返回任何内容。 您需要创建一个对象person,该对象具有属性getdata,该函数返回一个嵌套对象,该嵌套对象还具有属性welcome,该属性是一个返回字符串的函数

我认为你正在努力实现以下目标:

let person = {
    name: "Mario",
    age: 30,
    salary: 5555,
    getdata: function () {
        return {
            welcome: () =>  `hello: ${this.name} your age is ${this.salary}`
        }
    }
}
因此,您可以:

console.log(person.getdata().welcome()) //"hello: Mario your age is 5555"

您不会从该函数返回任何内容,因此它当然会给您未定义。您不会在
getdata
中直接返回任何内容,唯一的返回是在设置为
welcome
的箭头函数表达式中,它不是
getdata
的返回。在我看来,您似乎想要从函数返回函数。所以你可以使用这种方法。或者,您可以直接返回getdata(),如其他答案中所示,但我正在练习嵌套函数,所以我尝试用这种方式显示句子
console.log(person.getdata().welcome()) //"hello: Mario your age is 5555"