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

关于JavaScript中通过Dot Notation将函数赋值为对象实例方法的原理咨询

理解JavaScript中给对象动态添加方法的机制

嘿,我来帮你把这个困惑点捋明白!

首先要记住一个JavaScript的核心特性:几乎所有对象都是动态的——你可以在创建对象之后,随时给它添加新的属性或者修改已有属性,而方法本质上就是「值为函数的属性」。

拆解你困惑的那行代码

person1.getFullName = function () {
 return this.firstName + ' ' + this.lastName
}

这行代码做的事情非常直接:

  • person1是你用new Person()创建出来的实例对象,和普通JS对象一样具备动态特性
  • 你通过**点符号(Dot Notation)**给person1这个对象新增了一个名叫getFullName的属性
  • 这个属性的值是一个匿名函数,当你调用person1.getFullName()时,这个函数就会执行

关于this的作用

函数里的this在这里的行为很清晰:当你通过对象.方法()的形式调用函数时,this会自动指向调用这个方法的对象——也就是person1。所以this.firstName等价于person1.firstName(即"Bruce"),this.lastName等价于person1.lastName(即"Wayne"),最终返回拼接后的全名。

补充:这种方式和原型方法的区别

你可能会好奇,为什么不把这个方法直接写在Person构造函数里?或者为什么person2不能调用这个方法?

  • 你现在的写法是给单个实例添加独有的方法,只有person1能使用getFullName,person2没有这个属性,调用会报错
  • 如果想让所有Person的实例都拥有这个方法,应该把方法挂载到Person的原型上:
Person.prototype.getFullName = function() {
  return this.firstName + ' ' + this.lastName;
}

这样person1和person2都能调用getFullName(),因为JS的原型链机制会让实例继承原型上的属性和方法。

核心总结

  • JS对象是动态的,允许你随时添加/修改属性(除非对象被冻结)
  • 方法就是值为函数的属性,用点符号给对象绑定方法,本质就是给对象添加一个函数类型的属性
  • 调用对象方法时,this指向调用该方法的对象本身

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 22:13:10