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

能否通过函数本身访问其原型对象?原型属性为何无法直接访问?

能否通过函数本身访问该函数的prototype(原型)对象?

首先直接给结论:你不能直接通过构造函数本身访问其原型对象上的属性——必须明确通过构造函数.prototype的方式来访问原型上的内容,这也是你例子里Fan.speed返回undefined的核心原因。

为什么直接访问会返回undefined?

JavaScript里,构造函数本身是一个独立的函数对象,而它的prototype是另一个完全独立的对象。这两个对象的属性存储空间是完全分开的:

  • 当你写Fan.prototype.speed='high'时,你是把speed属性添加到了Fan.prototype这个对象上,而非Fan函数自身。
  • 当你尝试访问Fan.speed时,JavaScript会直接去查找Fan这个函数对象自身的属性,找不到自然就返回undefined。

举个更直观的例子帮你理解:

function Fan(){}
// 给原型对象添加属性
Fan.prototype.speed='high';
// 给函数自身添加属性
Fan.color='blue';

console.log(Fan.speed); // undefined —— 函数自身没有这个属性
console.log(Fan.prototype.speed); // 'high' —— 明确访问原型对象的属性
console.log(Fan.color); // 'blue' —— 函数自身的属性可以直接访问

那怎么正确访问原型上的属性?

有两种常见的正确方式:

  1. 直接通过构造函数的prototype属性访问:就像上面的Fan.prototype.speed,这是最直接的方式。
  2. 通过构造函数的实例访问:当你用new Fan()创建实例时,实例会继承原型对象的属性,JavaScript会通过原型链向上查找对应的属性:
const myFan = new Fan();
console.log(myFan.speed); // 'high' —— 实例通过原型链找到原型上的属性

补充:关于Something.name的小误区

你例子里提到Something.name输出undefined,其实这里可能存在小误解——JavaScript函数本身自带一个name属性,默认值就是函数的名称:

function Something(){}
console.log(Something.name); // 会输出'Something',而非undefined

如果你的代码里返回了undefined,大概率是你手动给Something函数自身设置了name为undefined,或者运行环境有特殊情况,但这和原型对象的name属性是完全两回事哦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:17:48