如何使用Symbol在Movie类中创建字段并生成唯一产品ID
实现方案
要满足你的需求,可以通过类静态属性生成唯一ID和Symbol作为属性键存储电影名称来实现,具体代码如下:
// 定义唯一的Symbol键,用于存储电影名称 const movieNameKey = Symbol('movieName'); class Movie { // 静态属性:记录下一个要分配的唯一ID,初始值为1 static nextUniqueId = 1; constructor(name) { // 为当前实例分配唯一ID,分配后自增保证下一个实例ID唯一 this.id = Movie.nextUniqueId++; // 使用Symbol键存储电影名称,确保字段的唯一性 this[movieNameKey] = name; } // 可选:提供获取电影名称的方法,因为Symbol键无法通过点语法直接访问 getMovieName() { return this[movieNameKey]; } }
关键部分说明
- 唯一ID生成:通过类的静态属性
nextUniqueId维护计数,每次创建实例时将当前值赋值给实例的id属性,随后自增。这种方式保证了无论创建多少个实例,ID都是全局唯一的。 - Symbol类型字段:使用
Symbol创建唯一的属性键movieNameKey,用这个键给实例赋值电影名称。Symbol类型的键不会与普通字符串键冲突,也无法被常规对象遍历方法(如for...in)访问到,满足字段的特殊要求。
使用示例
const interstellar = new Movie('星际穿越'); const inception = new Movie('盗梦空间'); console.log(interstellar.id); // 输出:1 console.log(inception.id); // 输出:2 console.log(interstellar.getMovieName()); // 输出:星际穿越 console.log(inception[movieNameKey]); // 输出:盗梦空间
内容的提问来源于stack exchange,提问作者trainee
相关产品推荐
相关产品推荐

