RubyMine 2025.2 Help

重构 JavaScript

重构意味着在不改变应用程序行为的情况下更新源代码。 重构帮助您保持代码的坚固、 简洁和易于维护。

移动符号重构

除了 移动文件和文件夹 ,RubyMine 还允许您移动 JavaScript 顶级符号。 移动符号重构 适用于 ES6 模块中的类、函数和变量。

移动类、函数或变量

  1. 选择要移动的符号。

  2. F6 或从上下文菜单或主菜单中选择 重构 | 移动。 或者,选择 重构 | 执行重构 或按 Ctrl+Alt+Shift+T ,然后从列表中选择 移动

    移动模块成员 对话框将打开。

  3. 指定目标文件并选择要移动的成员。

  4. 默认情况下,RubyMine 会自动将成员权限提升到所需级别。 如果您想保持可见性级别不变,请点击 保持原样 ,然后在 可见性 中选择。

向上 Pull Class Members 重构

Pull Class Members Up 重构将类方法在类层次结构中向上移动——从当前类移动到超类。

例如:将类方法移动到超类

假设您有一个类 AccountingDepartment 扩展一个抽象类 Department。 在此示例中, Pull Class Members Up 重构将 printMeeting() 方法从 AccountingDepartment 移动到其超类 Department

class Department { name; printName() { console.log("Department name: " + this.name); } } class AccountingDepartment extends Department { printMeeting() { console.log("The Accounting Department meets each Monday at 10am."); } generateReports() { console.log("Generating accounting reports..."); } }
class Department { name; printName() { console.log("Department name: " + this.name); } printMeeting() { console.log("The Accounting Department meets each Monday at 10am."); } } class AccountingDepartment extends Department { generateReports() { console.log("Generating accounting reports..."); } }

将类的方法移到超类

  1. 将文本光标放置在您要上移成员的类内的任意位置。

  2. 请选择 重构 | 上移成员 从主菜单或上下文菜单中。 上移成员 对话框将打开。

  3. 从列表中选择您要移动方法的超类。

  4. 要向上提取方法,请在 要上移的成员 列表中选中其旁边的复选框。

重命名重构

除了 重命名文件和文件夹之外,您还可以重命名类、方法、函数、变量和参数。 RubyMine 更改符号在其声明中的名称,并且默认情况下更改当前项目中所有用法。

重命名类及其方法

  1. 在编辑器中,将插入点放在要重命名的类或方法上,或选择它,然后按 Shift+F6 或从上下文菜单中选择 重命名

  2. 在打开的 重命名 对话框中,输入类或方法的新名称。

  3. 可选:

    • 请选择 在注释和字符串中搜索搜索文本出现位置 复选框以便重命名类或方法在注释、字符串字面量和文本中的用法。

    • 默认情况下,类或方法会在整个项目中被重命名。 您可以从列表中选择另一个 范围

保持类名和包含文件的一致性

当您重命名一个类时,RubyMine 还会建议重命名同名文件。 如果您接受建议,RubyMine 会更新其他文件中的 import 语句中的文件名。

重命名类和文件

如果您拒绝此建议,您可以稍后随时使用 重命名文件 意图操作重命名文件。 另一种意图操作建议将类移动到具有相应名称的新文件中。 建议名称的格式由 文件名约定 列表中选定的样式决定,位于 代码样式:JavaScript页面。

ws_js_refactoring_rename_file_intention_custom_naming_convention.png

如果您刚创建了一个新文件,但在其中开始输入类或接口时想出了一个更好的名称,这会很有用。 要调用意图操作,请将文本光标置于相关类的名称处并按下 Alt+Enter

重命名函数、变量和参数

重命名函数

函数、变量和参数的 Rename重构可能会在原地执行,但您可以按 Shift+F6重命名 对话框中配置重构范围。

要默认打开 重命名 对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 | 代码编辑 ,并在 指定重构选项 区域中选择 在模态对话框 选项。

重构设置:在模态对话框中打开设置
  1. 在编辑器中,将插入点放在要重命名的函数、变量或参数上,或选择它,然后按 Shift+F6 或从上下文菜单中选择 重命名

  2. 如果 RubyMine 在注释或字符串中检测到符号的用法,请指定是否也要重命名这些用法。

  3. 在带有 canvas 的字段中,输入函数、变量或参数的新名称。

  4. 或者:

    请再次按下 Shift+F6 以打开 重命名 对话框。

    • 选中 在注释和字符串中搜索搜索文本出现位置 复选框,以重命名符号在注释、字符串字面量和文本中的用法。

    • 默认情况下,该符号在整个项目中重命名。 您可以从列表中选择另一个 范围

重命名常量

  1. 在编辑器中,将插入点放在要重命名的常量上,或选择它,然后按 Shift+F6 或从上下文菜单中选择 重命名

  2. 在打开的 重命名 对话框中,输入常量的新名称。

  3. 可选:

    • 选中 在注释和字符串中搜索搜索文本出现位置 复选框,以便重命名注释、字符串文字和文本中的常量用法。

    • 默认情况下,常量在整个项目中重命名。 您可以从列表中选择另一个 范围

重命名符号的动态用法

由于 JavaScript 的动态特性,在某些情况下,动态引用是有效的使用方式,应该被重命名。 然而,通常重命名动态用法不是预期的行为。 在下面的示例中,将 test() 更改为 test1()rename.test() 中是正确的,而在 hello.test() 中则会是一个错误。

class Rename{ test() { return 12345; } } let rename = new Rename(); let hello = window["Test"]; let a = rename.test(); let b = hello.test();
class Rename{ test1() { return 12345; } } let rename = new Rename(); let hello = window["Test"]; let a = rename.test1(); let b = hello.test();
class Rename{ test1() { return 12345; } } let rename = new Rename(); let hello = window["Test"]; let a = rename.test1(); let b = hello.test1();

因此 RubyMine 总是在应用复杂重构前显示 预览 窗口。

动态用法的重构预览

提取重构

RubyMine 提供多种 Extract重构操作,以引入参数、变量、常量、字段、方法和函数。 要执行这些重构操作,请选择要重构的表达式并选择 重构 | <target>。 您可以选择整个表达式或将文本光标置于其中的任意位置,RubyMine 都将帮助您进行选择。

引入参数

使用 Introduce Parameter重构将函数调用中的表达式替换为参数。 RubyMine 将相应地更新函数的声明及调用。 新参数的默认值可以在函数主体内部初始化或通过函数调用传递。

假设您有一段代码,其中在函数 1 中硬编码了 calculate_sum(i)。 通过引入参数重构,您可以用一个 1 参数来替换这个硬编码的 i2。 新的 i2 参数可以提取为 可选必需

示例 1:引入一个可选参数

一个新的参数 i2 被提取为可选参数。 新参数在 calculate_sum(i) 的主体中初始化,并且 calculate_sum(i) 中的调用在 show_sum() 中没有变化。

请参阅下方的 选择参数类型(可选)

function calculate_sum(i) { alert('Adding ' + 1 + ' to ' + i); return 1 + i; } function show_sum() { alert('Result: ' + calculate_sum(5)); }
function calculate_sum(i, i2) { i2 = i2 || 1; alert('Adding ' + i2 + ' to ' + i); return i2 + i; } function show_sum() { alert('Result: ' + calculate_sum(5)); }

示例 2:介绍必需参数

新的参数 i2 被提取为必需参数, calculate_sum(i)show_sum() 中的调用已相应更改。

请参见 选择参数类型(必需)下文。

function calculate_sum(i) { alert('Adding ' + 1 + ' to ' + i); return 1 + i; } function show_sum() { alert('Result: ' + calculate_sum(5)); }
function calculate_sum(i, i2) { alert('Adding ' + i2 + ' to ' + i); return i2 + i; } function show_sum() { alert('Result: ' + calculate_sum(5, 1)); }

引入一个参数

  1. 在编辑器中,将文本光标放置在您想要转换为参数的表达式内,然后按 Ctrl+Alt+P 或从上下文菜单中选择 重构 | 引入参数

    或者,执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 引入参数

    • 转到 重构 | 提取 | 参数

  2. 如果在当前文本光标位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

    ws_js_extract_parameter_select_expression.png
  3. 如果找到多于一个的所选表达式实例,请从 找到多处出现 列表中选择 仅替换此处替换所有出现

    ws_js_extract_parameter_multiple_occurrences.png

    最后,用于配置重构的弹出窗口会出现。

    ws_js_extract_parameter_specify_parameter_name_and_type.png
  4. 选择 生成 JSDoc 生成一个 JSDoc 注释块。 如果您需要指定自定义的默认参数值,这可能会有所帮助。

  5. 选择新参数的类型(optionalrequired )并指定其默认值(如果适用):

    • 如果选中 可选参数 复选框,参数将在函数体中使用默认值进行初始化。

      请参见 Introduce Parameter example 1 上方。

    • 如果清除了 可选参数 复选框,默认参数值将通过现有的函数调用传递。 所有的函数调用都将根据新的函数签名进行更改,并且函数体内将添加一个参数初始化。

      请参见上面的 Introduce Parameter example 2

    最初,RubyMine 将调用重构的表达式作为默认值接收。 在大多数情况下,您无需更改它。 如果仍有必要,请在格式 @param <parameter name> - <default value> 的 JSDoc 注释中指定另一个默认值。

  6. 通过双击列表中的建议参数名之一接受它,或在红色画布的字段中指定自定义名称。 按 Enter 准备。

    ws_js_extract_parameter_result.png

    请注意,在 ES6 代码中,将应用新的默认函数参数语法 function calculate_sum(i, i2 = 1) ,而不是 i2 = i2 || 1;。 了解有关默认函数参数的更多信息,详见 https://developer.mozilla.org 网站

选择重构模式

您可以直接在编辑器中(在就地模式中)提取参数 ,如上所述或使用 引入参数对话框。 这两种方法非常相似,区别如下:

  • 预览重构的结果

    在对话框中,您可以点击 预览 ,并在 查找 工具窗口的专用选项卡中查看预期的更改。 在就地模式下,此功能不可用。

  • 指定默认参数值

    在对话框中,RubyMine 在 Value 字段中建议默认参数值,您可以接受建议或指定另一个值。 在就地模式中,RubyMine 会将调用重构的表达式视为默认参数值。 要指定另一个值,您必须使用 JSDoc 注释块。

默认情况下,RubyMine 以就地模式运行引入参数重构。 要使用 提取参数 对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 │ 代码编辑 ,并在 重构操作 区域中选择 在模态对话框 选项。

引入变量

使用 Introduce Variable 重构将表达式替换为 function-scoped variable (var)block-scoped variable (let)。 此重构使您的源代码更易读和维护。

假设您在 return 语句中有一个部分硬编码的表达式的函数:

Parenizor.method('toString', function ()) { return '(' + this.getValue() + ')'; }

借助引入变量重构,您可以用变量替换 '(' + this.getValue() + ')' 表达式,例如, string。 提取变量的作用域取决于其声明中使用的语句 varlet 以及新变量声明的上下文(在函数内部或外部)。

示例 1:用 let 声明引入块作用域变量

'(' + this.getValue() + ')' 表达式中在 return 语句提取出一个变量 string。 新变量通过 let 语句在 Parenizor.method('toString', function ()) 内声明。

Parenizor.method('toString', function ()) { return '(' + this.getValue() + ')'; }
Parenizor.method('toString', function ()) { let string = '(' + this.getValue() + ')'; return string; }

示例 2:引入一个变量并在任何函数之外声明它

navigator.appName 表达式中提取了一个变量 appName ,并在任何函数之外用 var 语句声明。

var browserName = "N/A"; if (navigator.appName.indexOf("Netscape") != -1) { browserName = "NS"; } else if (navigator.appName.indexOf("Microsoft") != -1) { browserName = "MSIE"; } else if (navigator.appName.indexOf("Opera") != -1) { browserName = "O"; }
var browserName = "N/A"; var appName = navigator.appName; if (appName.indexOf("Netscape") != -1) { browserName = "NS"; } else if (appName.indexOf("Microsoft") != -1) { browserName = "MSIE"; } else if (appName.indexOf("Opera") != -1) { browserName = "O"; }

引入一个变量

  1. 在编辑器中,选择要转换为变量的表达式,然后按 Ctrl+Alt+V 或从上下文菜单中选择 重构 | 引入变量

    或者,执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 引入变量

    • 转到 重构 | 提取 | 变量

  2. 如果在当前文本光标位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

    ws_js_refactoring_extract_variable_inplace_select_expression.png
  3. 如果找到多于一个的所选表达式实例,请从 找到多处出现 列表中选择 仅替换此处替换所有出现

    ws_js_refactoring_extract_variable_inplace_multiple_occurrences.png

    最后,用于配置重构的弹出窗口会出现。

  4. 从列表中选择用于声明新变量的语句:

    ws_js_refactoring_extract_variable_inplace_choose_scope_type.png
  5. 通过双击列表中的建议参数名之一接受它,或在红色画布的字段中指定自定义名称。 按 Enter 准备。

选择重构模式

您可以直接在编辑器中(就地模式)提取变量 ,如上所述或使用 提取变量对话框。 默认情况下,RubyMine 在就地模式下运行引入变量重构。 要使用 提取变量 对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 │ 代码编辑 ,并在 重构操作 区域中选择 在模态对话框 选项。

引入常量

使用 Introduce Constant 重构将表达式替换为 常量。 此重构使您的源代码更易读和维护。 它还可以帮助您避免使用未解释其值或目的的硬编码常量。

在类中,您可以引入 readonly 字段或选择一个范围(如果有多个范围适合)。 在其他上下文中,RubyMine 仅引入局部常量。

示例 1:为引入的常量选择一个范围

假设您有一个类 AccountingDepartment ,其方法 printName()"Department name :" 是硬编码的。

class AccountingDepartment { name; printName() { console.log("Department name: " + this.name); } printMeeting() {... } generateReports() {... } }

RubyMine可以作为局部变量在 printName() 函数内声明新的常量,或者在类外部以全局变量或模块变量的形式声明。

class AccountingDepartment { name; printName() { const departmentName = "Department name: "; console.log(departmentName + this.name); } printMeeting() {... } generateReports() {... } }
在封闭方法内引入局部常量并声明

"

const departmentName = "Department name: "; class AccountingDepartment { name; printName() { console.log(departmentName + this.name); } printMeeting() {... } generateReports() {... } }
引入全局常量并在类外声明

示例 2:仅引入常量而不选择范围

如果从任何类外部调用 Introduce Constant 重构,RubyMine 将自动引入一个局部变量,并在当前函数或块中声明它。

let output = MyFunction(5, 8); document.writeln("The value is .".output);
let output = MyFunction(5, 8); const Value = "The value is "; document.writeln(Value.output);
引入常量重构

引入一个常量

  1. 在编辑器中,选择要转换为常量的表达式,然后按 Ctrl+Alt+C 或从上下文菜单中选择 重构 | 引入常量

    或者,执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 引入常量

    • 转到 重构 | 提取 | 常量

    调用 Introduce Constant 重构
  2. 如果在当前文本光标位置检测到多个表达式,请从 表达式 列表中选择所需的表达式。

    引入常量:选择表达式
  3. 如果从类内部调用重构,请引入 readonly 字段或选择新常量的作用域,参见 示例 1

    引入常量:选择范围

    对于全局常量,可以找到所选表达式的多个出现。 从 找到多处出现 列表中选择 仅替换此处替换所有出现

    引入常量:全局常量的多次出现
  4. 通过双击列表中的建议参数名之一接受它,或在红色画布的字段中指定自定义名称。 按 Enter 准备。

    引入常量:选择名称

引入字段

Introduce Field 重构声明一个新字段并使用选定的表达式对其进行初始化。 原始表达式被字段的用法替换。

在下面的示例中,引入了相同的字段, _calcArea。 这些示例说明了初始化新引入字段的三种不同方式。

示例 1:引入的字段在封闭的方法中初始化

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } get area() { return this.calcArea(); } calcArea() { return this.height * this.width; } }
class Rectangle { constructor(height, width) { this.height = height; this.width = width; } _calcArea; get area() { this._calcArea = this.calcArea(); return this._calcArea; } calcArea() { return this.height * this.width; } }

示例 2:提取的字段在声明时初始化

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } get area() { return this.calcArea(); } calcArea() { return this.height * this.width; } }
class Rectangle { constructor(height, width) { this.height = height; this.width = width; } _calcArea = this.calcArea(); get area() { return this._calcArea; } calcArea() { return this.height * this.width; } }

示例 3:提取的字段在类的构造函数中初始化

class Rectangle { constructor(height, width) { this.height = height; this.width = width; } get area() { return this.calcArea(); } calcArea() { return this.height * this.width; } }
class Rectangle { constructor(height, width) { this._calcArea = this.calcArea(); this.height = height; this.width = width; } _calcArea; get area() { return this._calcArea; } calcArea() { return this.height * this.width; } }

介绍字段

  1. 在编辑器中,选择要转换为字段的表达式并按 Ctrl+Alt+F 或从上下文菜单中选择 重构 | 引入字段

    或者,执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 引入字段

    • 转到 重构|提取|字段

  2. 在弹出窗口中,选择新字段将被初始化的位置:

    • 当前方法 ,请参阅上面的 Example 1

    • 字段声明 ,请参见上面的 示例 2

    • 构造函数 ,请参阅上面的 Example 3

    就地提取字段
  3. 通过双击列表中的建议参数名之一接受它,或在红色画布的字段中指定自定义名称。 按 Enter 准备。

选择重构模式

默认情况下,RubyMine 会直接在编辑器中运行引入字段重构(就地模式), 如上所述

要在重构时使用提取字段对话框,请打开 设置 对话框(Ctrl+Alt+S ),转到 编辑器 │ 代码编辑 ,并在 重构操作 区域中选择 在模态对话框 选项。

提取方法

提取方法重构允许您使用提取的代码创建一个命名方法或函数。 当调用 Extract Method重构时,RubyMine会检测出选定代码片段的输入变量和输出变量。 检测到的 output 变量用作提取方法或函数的返回值。

在下面的示例中,函数是从 c = a + b; 表达式中提取的。

示例 1:从另一个函数内部的表达式提取全局作用域的函数

c = a + b; 表达式,它所在的位置调用了重构,该表达式位于 MyFunction() 函数内部。 已经选择 全局 目标范围。

示例 1.1:生成一个函数声明

function MyFunction(a, b) { c = a + b; return (c * c); } result = MyFunction(4, 6); document.write(result);
function extracted(a, b) { c = a + b; } function MyFunction(a, b) { extracted(a, b); return (c * c); } result = MyFunction(4, 6); document.write(result);

示例 1.2:提取的函数在表达式内部声明

function MyFunction(a, b) { c = a + b; return (c * c); } result = MyFunction(4, 6); document.write(result);
let extracted = function (a, b) { c = a + b; }; function MyFunction(a, b) { extracted(a, b); return (c * c); } result = MyFunction(4, 6); document.write(result);

示例 2:从任何函数外部的表达式中提取一个全局范围的函数

c = a + b; 表达式(重构在此调用)不在任何函数内。 因此,没有可用的目标范围选择。

示例 2.1:生成了一个函数声明

c = a + b;
function extracted() { c = a + b; } extracted();

示例 2.2:提取的函数在表达式内部声明

c = a + b;
let extracted = function () { c = a + b; }; extracted();

例 3:在封闭函数内提取具有定义的函数

c = a + b; 表达式,它所在的位置调用了重构,该表达式位于 MyFunction() 函数内部。 已经选择 function MyFunction 目标范围。

function MyFunction(a, b) { c = a + b; return (c * c); } result = MyFunction(4, 6); document.write(result);
function MyFunction(a, b) { function extracted() { c = a + b; } extracted(); return (c * c); } result = MyFunction(4, 6); document.write(result);

提取函数

  1. 在编辑器中,选择要转换为函数的代码片段,然后按 Ctrl+Alt+M 或者从上下文菜单中选择 重构 | 提取方法

    或者,执行以下操作之一:

    • Ctrl+Alt+Shift+T 并选择 提取方法

    • 转到 重构 | 提取 | 方法

  2. 如果选中的表达式在函数内,请从列表中选择目标范围:

    • 如果您选择 全局 ,提取的函数将在任何函数外部声明。 请参阅 上面的 Example 1

    • 要在当前封闭函数内定义提取的函数,请选择 function <current enclosing function name>。 请参见 Example 3上文。

    ws_refactoring_js_extract_method_extract.png
  3. 要打开具有更多选项的 Extract Method 对话框,请再次按 Ctrl+Alt+M。 在此对话框中,您可以选择提取的函数是否通过生成的 函数声明声明,或 在表达式内声明。 请参见 上面的示例

    ws_js_extract_method_es6.png

默认打开 Extract Function 对话框

  • 打开 设置 对话框 (Ctrl+Alt+S ),进入 编辑器 │ 代码编辑 ,并在 重构操作 区域选择 在模态对话框 选项。

提取超类

Extract Superclass 重构基于当前类的成员创建一个新的抽象类。 创建的类会自动扩展。

假设您有一个类 AccountingDepartment 并且您希望其中的 printName() 方法将被重用。

class AccountingDepartment { name; printName() { console.log("Department name: " + this.name); } printMeeting() { console.log("The Accounting Department meets each Monday at 10am."); } generateReports() { console.log("Generating accounting reports..."); } }

您可以提取一个超类 Department 并在其中包含 printName名称 字段。

class Department { name; printName() { console.log("Department name: " + this.name); } } class AccountingDepartment extends Department { printMeeting() { console.log("The Accounting Department meets each Monday at 10am."); } generateReports() { console.log("Generating accounting reports..."); } }

提取一个超类

  1. 将文本光标置于您想要提取超类的类中的任意位置。

  2. 从主菜单中选择 重构 | 提取 | 超类 或从上下文菜单中选择 重构|提取超类提取超类 对话框打开。

  3. 指定新超类的名称并选中类成员旁边的复选框以将其包括在内。 可选地,标记您要设为抽象的成员。

  4. 目标文件 字段中,指定新类文件的位置。 默认情况下,该字段显示调用重构的当前文件路径。

  5. 选择 提取超类。 RubyMine 创建一个新类,并使用 extends 标记源类。

    要创建一个超类并将方法参数中的源类引用替换为超类引用,请选择 提取超类并在可能的地方使用。 RubyMine 在 重构预览 窗格的 查找 工具窗口中显示建议的更改。

引入对象或数组解构

解构让您可以轻松地将数组和对象中的值解包到变量中。 此功能具有非常简洁的语法,通常在需要在您的应用程序中传递数据时使用。 欲了解更多信息,请参阅 Exploring ES6

在 RubyMine 中,您可以使用意图操作 Alt+Enter 调用解构。 使用 替换为对象/数组解构 操作,原始赋值将被删除。 为了保持此分配,请使用 引入对象/数组解构

替换原始分配

  1. 请将文本光标放在数组或对象中的某个值上,然后按 Alt+Enter

  2. 从列表中选择 替换为对象解构替换为数组解构

    有意操作进行解构:用数组解构替换

    如果数组或对象中的某些值未被使用,则这些元素将被跳过:

    意图解构操作:跳过项目

保持原始分配

  1. 请将文本光标放在数组或对象中的某个值上,然后按 Alt+Enter

  2. 从列表中选择 介绍对象解构介绍数组解构

    通过意图操作进行解构:引入数组解构

    此意图操作在使用 React 类组件时非常方便:

    有意解构操作:在 React 类中引入对象解构

为函数生成解构参数

  1. 将文本光标放置在函数的参数处并按下 Alt+Enter

  2. 从列表中选择 将参数转换为对象

提取 Vue 组件

提取 Vue 组件重构允许您从现有组件中提取新的 Vue.js 组件,而无需复制和粘贴。 请注意,此重构仅在就地模式下工作,因此请确保在 编辑器 │ 代码编辑 设置页面&#xa0; Ctrl+Alt+S 上选择了 在编辑器中 重构选项。

提取 Vue.js 组件

  1. 请选择要提取的代码片段,然后从其上下文菜单中选择 重构 | 提取 Vue 组件 或从主菜单中选择 重构 | 提取 | 提取 Vue 组件

    或者,使用专用的意图操作:选择要提取的模板片段,按 Alt+Enter ,然后从列表中选择 提取 Vue 组件。 如需更多信息,请参阅 Vue.js

  2. 请输入新组件的名称。 如果此名称已被使用或无效,RubyMine 会显示警告。 否则,将创建一个新的单文件组件,并将其导入到父组件中。

内联重构

内联重构与 提取重构相反。

示例 1:内联变量

内联变量 重构用该变量或常量的初始化器替换冗余的使用。 这种重构仅适用于块级作用域和函数作用域变量。

Parenizor.method('toString', function () { var string = '(' + this.getValue() + ')'; return string; }
Parenizor.method('toString', function () { return '(' + this.getValue() + ')'; }

示例 2:内联函数

内联方法/内联函数重构的结果是将方法或函数的主体放入其调用者的主体中;方法/函数本身被删除。

在下面的示例中, Sum() 的主体被放置在 Multiplication()Division() 的主体中。

function Sum(a, b) { return a + b; } function Multiplication(a, b) { c = Sum(a, b); d = c * c; return d; } function Division(a, b) { c = Sum(a, b); d = Multiplication(a, b); result = c / d; return result; }
function Multiplication(a, b) { c = a + b; d = c * c; return d; } function Division(a, b) { c = a + b; d = Multiplication(a, b); result = c / d; return result; }

运行 Inline 重构

  1. 在编辑器中,把文本光标放在要内联的符号上,然后按 Ctrl+Alt+N 或从上下文菜单或主菜单中选择 重构 | 内联

更改签名重构

使用 Change Signature重构来更改函数名称,添加、删除、重新排序和重命名参数,并在调用层级中传播新参数。

您还可以使用 Introduce Parameter重构来添加参数。

以下示例展示了运行 Change Signature 重构的不同方式。 在所有情况下,函数 result() 被重命名为 generate_result() ,并且该函数添加了一个新的参数 input。 示例显示了函数调用、调用函数 show_result() 和其他代码片段在不同重构设置下可能受到的影响。

示例 1:重命名函数、添加参数并通过函数调用传递其值

在此示例中,函数 result() 被重命名为 generate_result() ,添加了一个参数 input ,并将值 100 作为参数传递到函数调用中。

function result() { } function show_result() { alert('Result: ' + result()); }
function generate_result(input) { } function show_result() { alert('Result: ' + generate_result(100)); }

示例 2:重命名函数并添加默认参数

在此示例中,函数 result() 被重命名为 generate_result()。 默认参数 input 已添加,值为 100。 新参数在 generate_result() 中以 function generate_result(input = 100) {} 的格式为 ES6 语言级别或 input = input || 100 的格式为 ES5 进行初始化。

function result() { } function show_result() { alert('Result: ' + result()); }
function generate_result(input = 100) { } function show_result() { alert('Result: ' + generate_result()); }

示例 3:重命名函数,添加默认参数,并将参数传递到函数调用

在此示例中,函数 result() 被重命名为 generate_result()。 默认参数 input 已添加,值为 100。 新参数在 generate_result() 中以 function generate_result(input = 100) {} 的格式为 ES6 语言级别或 input = input || 100 的格式为 ES5 进行初始化。 input 参数通过调用函数 show_result() 传播,因此函数调用相应地更改。

function result() { } function show_result() { alert('Result: ' + result()); }
function generate_result(input = 100) { } function show_result() { alert('Result: ' + generate_result()); }

调用更改签名

  • 在编辑器中,将文本光标放在待重构的函数名称内,按 Ctrl+F6 或从上下文菜单或主菜单中选择 重构 | 更改签名更改签名 对话框打开。

重命名函数

  • 更改签名 对话框 Ctrl+F6 中,编辑 名称 字段。

管理函数参数

  • 更改签名 对话框 Ctrl+F6 中,使用参数表及其右侧的按钮:

    • 要添加新参数,请点击 "添加"按钮 &#xa0; Alt+Insert 并指定新参数的名称及其默认值或通过函数调用传递的值。

      请参见 示例1示例2上方。

    • 要删除参数,请点击相应行中的任意一个单元格,然后点击 删除按钮 &#xa0; Alt+Delete

    • 要重新排序参数,请使用 上一个出现按钮 &#xa0; Alt+Up下一个 Occurrence 按钮 &#xa0; Alt+Down

    • 要重命名参数,请编辑 名称 字段。

    • 如果必要,请 传递新参数 到调用当前函数的函数中。

沿调用层次传播参数

  1. 更改签名 对话框 Ctrl+F6 中,选择参数并点击 Propagate Parameter 按钮选择传播新参数的方法 对话框将打开。 左侧窗格显示函数调用的层次结构。 当您选择一个函数时,右侧窗格会显示其代码和它调用的函数的代码,分别在 调用方法被调用方法 字段中。

    请参见 Example 3上方。

  2. 在左侧窗格中,选中您想要传播参数的函数旁边的复选框,然后点击 确定

预览更改并完成重构

  1. 更改签名 对话框中,点击 预览

  2. 重构预览 选项卡中, “查找”工具窗口查看预期的更改 ,进行必要的调整,并在准备好时点击 重构

将默认导出转换为命名导出

对于类、函数、常量变量、字符串、对象和类型,您可以将 export default 语句替换为命名的 导出 语句,并相应更新对应的 import 语句。

如果符号被重新导出,相应的 导出 语句也会更新。

重构可以从 export defaultimport 语句中调用。

  • 将光标放在 export default 语句或您要导出的名称上,按 Alt+Enter ,然后选择 将默认导出转换为命名导出。 要切换预览,请按 Ctrl+Q

    从 export 语句中调用 export default 转换
  • import 语句中,将光标放在导入内容的名称上,按 Alt+Enter ,然后选择 将默认导出转换为命名导出。 预览(Ctrl+Q )显示 import 语句将如何更新。

    从导入语句调用默认导出转换

将具名导出转换为默认导出

对于类、函数、常量变量、字符串、对象和类型,您可以将具名 导出 语句替换为 export default 语句,并相应地更新对应的 import 语句。

重构可以从 export defaultimport 语句中调用。

  • 将插入符号放在 导出 语句中您要导出的名称上,按下 Alt+Enter ,然后选择 将具名导出转换为默认导出。 要切换预览,请按 Ctrl+Q

    从 export 语句中将具名导出转换为默认导出
  • import 语句中,将光标放在导入内容的名称上,按 Alt+Enter ,然后选择 将具名导出转换为默认导出。 预览(Ctrl+Q )显示 import 语句将如何更新。

    从 export 语句中将具名导出转换为默认导出
最后修改日期: 2025年 9月 26日