如何无需声明const即可动态创建对象?基于Car构造函数场景
无需声明const即可动态命名对象的方法
你可以通过容器对象存储或者全局对象属性绑定的方式实现动态命名对象,不用显式声明const变量。
推荐方案:用容器对象管理动态实例
这种方式更安全,不会污染全局作用域,也方便统一管理所有Car实例:
function Car(make, color) { this.make = make; this.color = color; this.greet = function () { console.log(`The make is ${this.make} and color is ${this.color}`); }; } const newObject = "Toyota"; // 创建一个容器对象 const cars = {}; // 用newObject的值作为键,存储Car实例 cars[newObject] = new Car("Toyota", "red"); // 调用方法 cars[newObject].greet(); // 输出:The make is Toyota and color is red // 后续还可以添加更多实例 cars["Ford"] = new Car("Ford", "blue"); cars["Ford"].greet();
不推荐方案:绑定到全局对象(浏览器环境)
如果是在浏览器环境,你可以把实例绑定到window对象上,这样就能直接通过变量值对应的名称访问,但这种方式会污染全局作用域,容易引发命名冲突,不建议在生产代码中使用:
function Car(make, color) { this.make = make; this.color = color; this.greet = function () { console.log(`The make is ${this.make} and color is ${this.color}`); }; } const newObject = "Toyota"; // 绑定到window对象,直接用newObject的值作为属性名 window[newObject] = new Car("Toyota", "red"); // 直接通过名称访问 Toyota.greet(); // 输出:The make is Toyota and color is red
为什么不能直接用变量当标识符?
JavaScript中,变量名(标识符)是静态定义的,无法直接用字符串变量动态创建。必须通过对象的属性访问器([]语法)来实现动态键名的赋值与访问。
内容的提问来源于stack exchange,提问作者Richie
相关产品推荐
相关产品推荐

