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

JavaScript原型与箭头函数问题:fatArrayGetName返回空字符串原因咨询

为什么箭头函数作为原型方法无法获取实例的name属性?

我明白你遇到的问题了——用箭头函数当原型方法时,拿不到实例的name属性,返回空字符串对吧?这其实是箭头函数最核心的特性导致的:箭头函数没有自己独立的this上下文。

咱们先还原一下你大概率写的代码,大概是这样的:

function FatArray(name) {
  this.name = name;
}

FatArray.prototype.fatArrayGetName = () => {
  return this.name;
};

const myArray = new FatArray("My Custom Array");
console.log(myArray.fatArrayGetName()); // 输出空字符串

为什么会出现这个现象?因为箭头函数的this不是在调用时绑定的,而是定义时就直接继承了外层作用域的this。在这个例子里,箭头函数fatArrayGetName是在全局作用域下定义的(FatArray本身在全局作用域声明),所以它的this指向全局对象(浏览器里是window,Node.js里是globalThis),而全局对象的name属性默认就是空字符串,所以调用后自然返回空。要是在严格模式下,外层作用域的this会是undefined,这时候调用还会直接抛出错误。

那怎么解决这个问题?把箭头函数换成普通的函数声明或者表达式就行——普通函数作为原型方法时,this会在调用时自动绑定到实例对象:

// 写法1:普通函数表达式
FatArray.prototype.fatArrayGetName = function() {
  return this.name;
};

// 写法2:ES6方法简写(本质还是普通函数)
FatArray.prototype = {
  fatArrayGetName() {
    return this.name;
  }
};

这样再调用myArray.fatArrayGetName(),this就会指向myArray实例,就能正确拿到name属性的值了。

最后再划个重点:箭头函数适合需要捕获外层this的场景(比如回调函数里不想改变this指向),但绝对不适合作为依赖实例this的原型方法,因为它根本不会绑定到实例上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:25:22