关于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
相关产品推荐
相关产品推荐

