You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何拼接名与姓?遇TypeError错误求解决方案

解决JavaScript中拼接姓名时的TypeError问题

你遇到的TypeError: Person.fname is not a function错误,核心原因是你搞错了原型方法的调用方式:fname和lname是挂载在Person.prototype上的实例方法,这类方法只能通过Person的实例来调用,而不是直接用构造函数Person去调用。

看你代码里的fullname方法:

Person.prototype.fullname=function(){
  return Person.fname() + Person.lname()
}

这里直接用Person.fname(),相当于在找构造函数Person本身的fname静态方法,但你根本没定义过这个,所以才会抛出错误。

修正后的代码

只需要把调用方式改成通过this来访问实例方法即可——在实例方法内部,this指向当前的Person实例,能正确访问原型上的方法:

function Person(){ }
Person.prototype.fname=function(){ return "abc" }
Person.prototype.lname=function(){ return "lop" }
Person.prototype.fullname=function(){
  // 用this调用原型上的实例方法,加空格让姓名格式更合理
  return this.fname() + " " + this.lname()
}
var p = new Person();
console.log(p.fullname()) // 输出 "abc lop"

额外推荐:ES6 Class写法(更直观)

如果你的运行环境支持ES6,用Class语法实现会更清晰,调用逻辑和上面一致:

class Person {
  fname() { return "abc" }
  lname() { return "lop" }
  fullname() {
    return `${this.fname()} ${this.lname()}`
  }
}
const p = new Person();
console.log(p.fullname()) // 输出 "abc lop"

记住一个关键点:挂载在prototype上的方法是给实例用的,必须通过实例(或者方法内部的this)来调用;如果是构造函数本身的静态方法,才用Person.method()的方式调用。

内容的提问来源于stack exchange,提问作者naveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:54:12