JavaScript:使用方括号表示法创建对象后方法调用返回undefined问题咨询
问题分析与解决方案
嗨,我来帮你排查下代码里的问题,你遇到的undefined主要是两个原因导致的:
this指向错误:你在document.write里用的*this*["Full Name"],这里的*this*在全局浏览器环境下指向的是window对象,而不是你创建的employee对象,自然找不到这个方法,所以返回undefined。你应该调用employee["Full Name"](),注意要加括号执行这个函数哦。- 字符串拼接缺少空格:就算你调用对了方法,当前代码里
return this["First Name"] + this["Last Name"]会把名字直接连在一起变成JoshSmith,而不是你想要的Josh Smith,需要在中间加个空格。
修正后的代码
var employee = { ["Last Name"]: "Smith", ["First Name"]: "Josh", ["Full Name"]: function() { return this["First Name"] + " " + this["Last Name"]; } }; document.write("Good day " + employee["Full Name"]());
额外优化建议
如果是ES6及以上的运行环境,你可以用更简洁的语法来写这段代码,可读性会更好:
const employee = { ["Last Name"]: "Smith", ["First Name"]: "Josh", // 简洁的方法定义语法 ["Full Name"]() { // 模板字符串拼接更直观 return `${this["First Name"]} ${this["Last Name"]}`; } }; // 用console.log比document.write更推荐哦 console.log(`Good day ${employee["Full Name"]()}`);
内容的提问来源于stack exchange,提问作者Jake Go
相关产品推荐
相关产品推荐

