js基本Constructor(构造器)

本文介绍了JavaScript中构造器函数的概念及使用方式,并演示了如何利用原型(prototype)实现方法共享,提高代码效率。

js不支持类的概念,单它支持与对象一起用的特殊Constructor(构造器)函数。通过在构造器前面加new关键字,告诉js想使用构造器一样实例化一个新的对象,并且对象成员由该函数定义。在构造器内,关键字this引用新创建的对象。基本构造器如下面这个例子:

function Car(m,y,s){
   this.m=m;
   this.y=y;
   this.s=s;
  
   this.toString = function(){
      return this.m+'has done'+this.s+'miles';
   };
}
var civic = new Car('Honda Civic',2009,20000);
var mondeo = new Car('Ford Mondeo',2010,5000);

console.log(civic.toString());
console.log(mondeo.toString());

 这是一个简单的构造器,每一次定义新对象,都是使用Car构造器创建的。但这个不理想,toString()函数对每一个新对象都要分别重新定义。所以要想在所有的Car类型实例之间共享就要用到带原型的构造器,也就是prototype。

function Car(m,y,s){
   this.m=m;
   this.y=y;
   this.s=s;
}
  
Car.prototype.toString = function(){
      return this.m+'has done'+this.s+'miles';
};

var civic = new Car('Honda Civic',2009,20000);
var mondeo = new Car('Ford Mondeo',2010,5000);

console.log(civic.toString());
console.log(mondeo.toString());

 这样就能让toString()函数实现在Car对象之间共享了。

在 Visual Studio Code (VSCode) 中,可以通过内置的功能或者扩展来快速生成 JavaScript 类的 `constructor` 方法。以下是实现这一目标的具体方法: ### 使用 VSCode 的 Emmet 缩写功能 通过 Emmet 功能,可以直接输入缩写并将其展开为完整的代码结构。对于类和构造函数,可以尝试以下方式: 1. 输入 `class` 并按 Tab 键,这会自动生成一个基本的类模板。 2. 手动添加属性后,在需要的位置输入 `constructor()` 并编写逻辑。 虽然这种方式不完全自动化,但它提供了基础支持[^4]。 ### 利用 Snippets 自定义代码片段 VSCode 支持用户创建自己的代码片段(Snippets),从而更高效地生成特定代码模式。以下是具体操作步骤: #### 创建一个新的代码片段文件 1. 进入命令面板 (`Ctrl+Shift+P`) 并选择 **Preferences: Configure User Snippets**。 2. 选择全局设置或针对 JavaScript 文件新建专属 snippets 文件。 #### 定义 Constructor 自动生成规则 在打开的 JSON 配置文件中加入如下内容: ```json { "Class with Constructor": { "prefix": ["cls", "class"], "body": [ "class ${1:ClassName} {", "\tconstructor(${2}) {", "\t\tthis.${3:paramName} = ${2};", "\t}", "", "\t${4:// methods...}", "}" ], "description": "Create a JS class with constructor" } } ``` 这样当键入 `cls` 或者 `class` 后按下 Tab 键即可触发该模板[^5]。 ### 关于依赖注入中的构造器 vs Setter 注入 如果涉及到复杂对象初始化比如循环依赖处理时,正如提到过的解决方案之一就是采用Setter Injection替代Constructor Injection[^1]。然而这是框架层面的设计考量而非编辑器特性关联紧密之处。 ### 示例代码展示如何应用上述技巧构建简单类实例 下面是一个利用前面介绍的方法所形成的例子: ```javascript // 使用自定义snippet生成的结果 class ExampleClass { constructor(name, age) { this.name = name; this.age = age; } greet() { console.log(`Hello! My name is ${this.name}.`); } } const person = new ExampleClass('Alice', 30); person.greet(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值