JavaScript为对象添加nameLength方法无法获取姓名长度问题
问题原因
你编写的方法逻辑本身没有语法错误,无法获取姓名长度的核心原因是没有将该方法正确关联到employee对象上:
- 如果你是直接单独写
nameLength: function(){...}这段代码,它属于对象字面量的属性语法,脱离对象单独声明会直接报错 - 就算你把它改成普通函数声明,调用时this会指向全局环境(浏览器端为window,Node.js端为global),全局环境不存在对应name属性,读取length自然会返回undefined或者报错。
只有方法作为对象的属性被调用时,内部this才会指向当前对象,才能正确读取到employee的name属性。
修正方案
提供两种常用的实现方式:
方案1:声明对象时直接内置方法
// 给定对象: var employee = { name: "John Smith", job: "Programmer", age: 31, // 直接把方法写在对象属性里 nameLength: function(){ console.log(this.name.length); } } // 调用测试 employee.nameLength() // 控制台输出10
方案2:已声明对象后续追加方法
如果employee对象已经提前声明完成,用点语法给对象追加方法即可:
// 原有对象声明 var employee = { name: "John Smith", job: "Programmer", age: 31 } // 追加nameLength方法 employee.nameLength = function(){ console.log(this.name.length); } // 调用测试 employee.nameLength() // 控制台输出10
内容的提问来源于stack exchange,提问作者khushal yadav
相关产品推荐
相关产品推荐

