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

JavaScript中两个原型方法定义写法的差异是什么?

为什么两段User1构造函数代码执行结果不同?

先看两段代码的实际表现:

代码1(输出undefined)

var User1 = function (name, age) { this.name = name; }
User1.prototype.getName = () => { return this.name; }
var x = new User1("gladiator");
console.log(x.getName()); 

代码2(输出gladiator)

var User1 = function (name, age) { this.name = name; }
User1.prototype.getName = function () { return this.name; }
var x = new User1("gladiator");
console.log(x.getName()); 

这个问题的核心差异,全在箭头函数和普通函数的this指向规则上!

  • 先看代码2里的普通函数:当我们调用x.getName()时,普通函数的this是在调用时绑定的,它会指向调用这个方法的对象——也就是我们用new创建出来的User1实例x。所以this.name就是x.name,自然能拿到"gladiator"。

  • 再看代码1里的箭头函数:箭头函数的this是在定义时就固定死的,它不会自己绑定this,而是直接继承外层作用域的this。这里我们是在全局环境下定义的箭头函数,外层作用域的this在浏览器里是window对象,Node.js里是global对象,而这个全局对象里根本没有我们设置的name属性,所以返回undefined。

简单说:箭头函数天生不适合做原型方法,因为它没法绑定到实例的this上,普通函数才是原型方法的正确打开方式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:53:07