JavaScript中如何通过属性获取类实例及实例名称?代码疑问求解
问题解答
1. 通过index获取对应实例的名称和平假名
首先得把所有hkr实例统一存到一个集合(比如数组)里,另外创建实例时最好给每个实例加个name属性存变量名(因为JS没法直接通过实例反向拿到它的变量名)。示例代码:
// 定义hkr类 class hkr { constructor(name, romaji, hiragana, katakana, index) { this.name = name; this.romaji = romaji; this.hiragana = hiragana; this.katakana = katakana; this.index = index; } } // 创建实例并加入数组 const allHKR = [ new hkr('wo', 'wo', 'を', 'ヲ', 1), new hkr('ka', 'ka', 'か', 'カ', 2) ]; // 根据index查找实例 function getHKRByIndex(targetIndex) { const match = allHKR.find(item => item.index === targetIndex); if (match) { console.log(`实例名称:${match.name},平假名:${match.hiragana}`); return match; } console.log('未找到对应index的实例'); } // 调用示例 getHKRByIndex(1);
2. 为什么input_romaji.value.index无效,wo.index有效
核心是数据类型不同:
wo是你用hkr类创建的实例对象,自带index等自定义属性,所以能直接访问wo.index。input_romaji.value是输入框的字符串值(比如用户输入的罗马音),字符串本身没有你定义的index属性,自然拿不到值。你得先根据这个字符串找到对应的hkr实例,再访问实例的index。
3. 更实用的数据组织方式推荐
如果只是单纯存储罗马音、假名、索引这类静态数据,类确实有点“重”,推荐这几种轻便的方式:
- 数组存储对象字面量:最直观,适合遍历或批量操作
const kanaData = [ { name: 'wo', romaji: 'wo', hiragana: 'を', katakana: 'ヲ', index: 1 }, { name: 'ka', romaji: 'ka', hiragana: 'か', katakana: 'カ', index: 2 } ]; // 根据index查找: const target = kanaData.find(item => item.index === 1);
- Map结构:如果经常根据index或罗马音做快速查找,Map的键值对查找效率更高
// 以index为键 const kanaMap = new Map([ [1, { name: 'wo', romaji: 'wo', hiragana: 'を', katakana: 'ヲ' }], [2, { name: 'ka', romaji: 'ka', hiragana: 'か', katakana: 'カ' }] ]); // 查找: const target = kanaMap.get(1);
- 对象索引:如果用字符串当键(比如罗马音),普通对象也很方便
const kanaObj = { wo: { hiragana: 'を', katakana: 'ヲ', index: 1 }, ka: { hiragana: 'か', katakana: 'カ', index: 2 } }; // 查找: const target = kanaObj['wo'];
内容的提问来源于stack exchange,提问作者Jirafey
相关产品推荐
相关产品推荐

