fix(eslint): reduce warnings in GitHub Actions deployment
- Disable formatting rules (handled by Prettier) - Relaxed strict Vue/JS rules for demo code compatibility - Fix syntax errors in ApiPlayground and VoiceCloningDemo - Fix duplicate else-if condition in ApiPlayground - Fix Promise executor async pattern in AutoregressiveAudioDemo - Add TypeScript file support to ESLint config Warnings reduced from 295 to 251 problems. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,89 +16,148 @@
|
||||
<button
|
||||
v-for="scenario in scenarios"
|
||||
:key="scenario.id"
|
||||
@click="activeScenario = scenario.id"
|
||||
class="scenario-btn"
|
||||
:class="{ active: activeScenario === scenario.id }"
|
||||
@click="activeScenario = scenario.id"
|
||||
>
|
||||
{{ scenario.label }}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- 方法调用 -->
|
||||
<div v-if="activeScenario === 'method'" class="scenario-content">
|
||||
<div
|
||||
v-if="activeScenario === 'method'"
|
||||
class="scenario-content"
|
||||
>
|
||||
<div class="split-view">
|
||||
<div class="code-panel">
|
||||
<div class="code-title">对象方法调用</div>
|
||||
<div class="code-title">
|
||||
对象方法调用
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<div class="code-line">const person = {</div>
|
||||
<div class="code-line indent">name: "张三",</div>
|
||||
<div class="code-line indent">greet: function() {</div>
|
||||
<div class="code-line indent indent">return "你好,我是" + this.name</div>
|
||||
<div class="code-line indent">}</div>
|
||||
<div class="code-line">}</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">person.greet() <span class="comment">// this → person</span></div>
|
||||
<div class="code-line">
|
||||
const person = {
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
name: "张三",
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
greet: function() {
|
||||
</div>
|
||||
<div class="code-line indent indent">
|
||||
return "你好,我是" + this.name
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
person.greet() <span class="comment">// this → person</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="visual-panel">
|
||||
<div class="object-visual">
|
||||
<div class="object-box">
|
||||
<div class="object-title">person 对象</div>
|
||||
<div class="object-title">
|
||||
person 对象
|
||||
</div>
|
||||
<div class="object-content">
|
||||
<div class="property">name: "张三"</div>
|
||||
<div class="method" @click="simulateMethodCall">
|
||||
<div class="property">
|
||||
name: "张三"
|
||||
</div>
|
||||
<div
|
||||
class="method"
|
||||
@click="simulateMethodCall"
|
||||
>
|
||||
greet: function() { ... }
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="arrow-indicator">
|
||||
<div class="this-pointer">this →</div>
|
||||
<div class="this-pointer">
|
||||
this →
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="methodCallResult" class="result-box">
|
||||
<div
|
||||
v-if="methodCallResult"
|
||||
class="result-box"
|
||||
>
|
||||
{{ methodCallResult }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule-box">
|
||||
<div class="rule-title">规则:对象方法</div>
|
||||
<div class="rule-content">通过对象调用方法时,<code>this</code> 指向该对象</div>
|
||||
<div class="rule-title">
|
||||
规则:对象方法
|
||||
</div>
|
||||
<div class="rule-content">
|
||||
通过对象调用方法时,<code>this</code> 指向该对象
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 普通函数 -->
|
||||
<div v-else-if="activeScenario === 'function'" class="scenario-content">
|
||||
<div
|
||||
v-else-if="activeScenario === 'function'"
|
||||
class="scenario-content"
|
||||
>
|
||||
<div class="split-view">
|
||||
<div class="code-panel">
|
||||
<div class="code-title">普通函数调用</div>
|
||||
<div class="code-title">
|
||||
普通函数调用
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<div class="code-line">function show() {</div>
|
||||
<div class="code-line indent">return this === window</div>
|
||||
<div class="code-line">}</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">show() <span class="comment">// this → window (浏览器)</span></div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line comment">// 严格模式下是 undefined</div>
|
||||
<div class="code-line">
|
||||
function show() {
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
return this === window
|
||||
</div>
|
||||
<div class="code-line">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
show() <span class="comment">// this → window (浏览器)</span>
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line comment">
|
||||
// 严格模式下是 undefined
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="visual-panel">
|
||||
<div class="function-visual">
|
||||
<div class="global-window">
|
||||
<div class="window-title">window (全局对象)</div>
|
||||
<div class="window-title">
|
||||
window (全局对象)
|
||||
</div>
|
||||
<div class="window-content">
|
||||
<div class="global-item">show 函数在这里</div>
|
||||
<div class="global-item">this → window</div>
|
||||
<div class="global-item">
|
||||
show 函数在这里
|
||||
</div>
|
||||
<div class="global-item">
|
||||
this → window
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mode-toggle">
|
||||
<button @click="strictMode = !strictMode" class="toggle-btn">
|
||||
<button
|
||||
class="toggle-btn"
|
||||
@click="strictMode = !strictMode"
|
||||
>
|
||||
{{ strictMode ? '严格模式:开' : '严格模式:关' }}
|
||||
</button>
|
||||
<div class="mode-result">
|
||||
@@ -107,7 +166,9 @@
|
||||
</div>
|
||||
|
||||
<div class="rule-box">
|
||||
<div class="rule-title">规则:普通函数</div>
|
||||
<div class="rule-title">
|
||||
规则:普通函数
|
||||
</div>
|
||||
<div class="rule-content">
|
||||
非严格模式:<code>this</code> 指向全局对象<br>
|
||||
严格模式:<code>this</code> 是 <code>undefined</code>
|
||||
@@ -118,20 +179,39 @@
|
||||
</div>
|
||||
|
||||
<!-- 构造函数 -->
|
||||
<div v-else-if="activeScenario === 'constructor'" class="scenario-content">
|
||||
<div
|
||||
v-else-if="activeScenario === 'constructor'"
|
||||
class="scenario-content"
|
||||
>
|
||||
<div class="split-view">
|
||||
<div class="code-panel">
|
||||
<div class="code-title">构造函数调用</div>
|
||||
<div class="code-title">
|
||||
构造函数调用
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<div class="code-line">function Person(name) {</div>
|
||||
<div class="code-line indent">this.name = name</div>
|
||||
<div class="code-line">}</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">const p1 = new Person("李四")</div>
|
||||
<div class="code-line">const p2 = new Person("王五")</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line comment">// p1.name = "李四"</div>
|
||||
<div class="code-line comment">// p2.name = "王五"</div>
|
||||
<div class="code-line">
|
||||
function Person(name) {
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
this.name = name
|
||||
</div>
|
||||
<div class="code-line">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
const p1 = new Person("李四")
|
||||
</div>
|
||||
<div class="code-line">
|
||||
const p2 = new Person("王五")
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line comment">
|
||||
// p1.name = "李四"
|
||||
</div>
|
||||
<div class="code-line comment">
|
||||
// p2.name = "王五"
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -142,17 +222,23 @@
|
||||
<span class="step-num">1</span>
|
||||
<span>创建新对象</span>
|
||||
</div>
|
||||
<div class="process-arrow">↓</div>
|
||||
<div class="process-arrow">
|
||||
↓
|
||||
</div>
|
||||
<div class="process-step">
|
||||
<span class="step-num">2</span>
|
||||
<span>this 指向新对象</span>
|
||||
</div>
|
||||
<div class="process-arrow">↓</div>
|
||||
<div class="process-arrow">
|
||||
↓
|
||||
</div>
|
||||
<div class="process-step">
|
||||
<span class="step-num">3</span>
|
||||
<span>执行构造函数</span>
|
||||
</div>
|
||||
<div class="process-arrow">↓</div>
|
||||
<div class="process-arrow">
|
||||
↓
|
||||
</div>
|
||||
<div class="process-step">
|
||||
<span class="step-num">4</span>
|
||||
<span>返回新对象</span>
|
||||
@@ -161,18 +247,28 @@
|
||||
|
||||
<div class="object-comparison">
|
||||
<div class="obj-instance">
|
||||
<div class="obj-title">p1</div>
|
||||
<div class="obj-content">name: "李四"</div>
|
||||
<div class="obj-title">
|
||||
p1
|
||||
</div>
|
||||
<div class="obj-content">
|
||||
name: "李四"
|
||||
</div>
|
||||
</div>
|
||||
<div class="obj-instance">
|
||||
<div class="obj-title">p2</div>
|
||||
<div class="obj-content">name: "王五"</div>
|
||||
<div class="obj-title">
|
||||
p2
|
||||
</div>
|
||||
<div class="obj-content">
|
||||
name: "王五"
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule-box">
|
||||
<div class="rule-title">规则:new 调用</div>
|
||||
<div class="rule-title">
|
||||
规则:new 调用
|
||||
</div>
|
||||
<div class="rule-content">
|
||||
使用 <code>new</code> 调用函数时,<code>this</code> 指向新创建的对象
|
||||
</div>
|
||||
@@ -182,52 +278,104 @@
|
||||
</div>
|
||||
|
||||
<!-- call/apply/bind -->
|
||||
<div v-else-if="activeScenario === 'explicit'" class="scenario-content">
|
||||
<div
|
||||
v-else-if="activeScenario === 'explicit'"
|
||||
class="scenario-content"
|
||||
>
|
||||
<div class="split-view">
|
||||
<div class="code-panel">
|
||||
<div class="code-title">显式绑定 (call/apply/bind)</div>
|
||||
<div class="code-title">
|
||||
显式绑定 (call/apply/bind)
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<div class="code-line">function greet() {</div>
|
||||
<div class="code-line indent">return "我是" + this.name</div>
|
||||
<div class="code-line">}</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">const person = { name: "小明" }</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">greet.call(person) <span class="comment">// 显式指定 this</span></div>
|
||||
<div class="code-line">greet.apply(person)</div>
|
||||
<div class="code-line">const bound = greet.bind(person)</div>
|
||||
<div class="code-line">
|
||||
function greet() {
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
return "我是" + this.name
|
||||
</div>
|
||||
<div class="code-line">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
const person = { name: "小明" }
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
greet.call(person) <span class="comment">// 显式指定 this</span>
|
||||
</div>
|
||||
<div class="code-line">
|
||||
greet.apply(person)
|
||||
</div>
|
||||
<div class="code-line">
|
||||
const bound = greet.bind(person)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="visual-panel">
|
||||
<div class="binding-visual">
|
||||
<div class="function-box">
|
||||
<div class="box-title">greet 函数</div>
|
||||
<div class="box-content">this.name</div>
|
||||
<div class="box-title">
|
||||
greet 函数
|
||||
</div>
|
||||
<div class="box-content">
|
||||
this.name
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="binding-methods">
|
||||
<div class="binding-item" @click="simulateCall" :class="{ active: bindingMethod === 'call' }">
|
||||
<div class="method-name">call(person)</div>
|
||||
<div class="method-desc">立即调用,this → person</div>
|
||||
<div
|
||||
class="binding-item"
|
||||
:class="{ active: bindingMethod === 'call' }"
|
||||
@click="simulateCall"
|
||||
>
|
||||
<div class="method-name">
|
||||
call(person)
|
||||
</div>
|
||||
<div class="method-desc">
|
||||
立即调用,this → person
|
||||
</div>
|
||||
</div>
|
||||
<div class="binding-item" @click="simulateApply" :class="{ active: bindingMethod === 'apply' }">
|
||||
<div class="method-name">apply(person)</div>
|
||||
<div class="method-desc">同 call,参数为数组</div>
|
||||
<div
|
||||
class="binding-item"
|
||||
:class="{ active: bindingMethod === 'apply' }"
|
||||
@click="simulateApply"
|
||||
>
|
||||
<div class="method-name">
|
||||
apply(person)
|
||||
</div>
|
||||
<div class="method-desc">
|
||||
同 call,参数为数组
|
||||
</div>
|
||||
</div>
|
||||
<div class="binding-item" @click="simulateBind" :class="{ active: bindingMethod === 'bind' }">
|
||||
<div class="method-name">bind(person)</div>
|
||||
<div class="method-desc">返回新函数,this 固定</div>
|
||||
<div
|
||||
class="binding-item"
|
||||
:class="{ active: bindingMethod === 'bind' }"
|
||||
@click="simulateBind"
|
||||
>
|
||||
<div class="method-name">
|
||||
bind(person)
|
||||
</div>
|
||||
<div class="method-desc">
|
||||
返回新函数,this 固定
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="bindingResult" class="binding-result">
|
||||
<div
|
||||
v-if="bindingResult"
|
||||
class="binding-result"
|
||||
>
|
||||
{{ bindingResult }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule-box">
|
||||
<div class="rule-title">规则:显式绑定</div>
|
||||
<div class="rule-title">
|
||||
规则:显式绑定
|
||||
</div>
|
||||
<div class="rule-content">
|
||||
<code>call/apply/bind</code> 可以显式指定 <code>this</code> 的指向
|
||||
</div>
|
||||
@@ -237,48 +385,85 @@
|
||||
</div>
|
||||
|
||||
<!-- 箭头函数 -->
|
||||
<div v-else class="scenario-content">
|
||||
<div
|
||||
v-else
|
||||
class="scenario-content"
|
||||
>
|
||||
<div class="split-view">
|
||||
<div class="code-panel">
|
||||
<div class="code-title">箭头函数的 this</div>
|
||||
<div class="code-title">
|
||||
箭头函数的 this
|
||||
</div>
|
||||
<div class="code-block">
|
||||
<div class="code-line">const person = {</div>
|
||||
<div class="code-line indent">name: "小红",</div>
|
||||
<div class="code-line indent">greet: function() {</div>
|
||||
<div class="code-line indent indent">setTimeout(() => {</div>
|
||||
<div class="code-line indent indent indent">console.log(this.name)</div>
|
||||
<div class="code-line indent indent">}, 1000)</div>
|
||||
<div class="code-line indent">}</div>
|
||||
<div class="code-line">}</div>
|
||||
<div class="code-line"></div>
|
||||
<div class="code-line">person.greet() <span class="comment">// 输出 "小红"</span></div>
|
||||
<div class="code-line">
|
||||
const person = {
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
name: "小红",
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
greet: function() {
|
||||
</div>
|
||||
<div class="code-line indent indent">
|
||||
setTimeout(() => {
|
||||
</div>
|
||||
<div class="code-line indent indent indent">
|
||||
console.log(this.name)
|
||||
</div>
|
||||
<div class="code-line indent indent">
|
||||
}, 1000)
|
||||
</div>
|
||||
<div class="code-line indent">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line">
|
||||
}
|
||||
</div>
|
||||
<div class="code-line" />
|
||||
<div class="code-line">
|
||||
person.greet() <span class="comment">// 输出 "小红"</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="visual-panel">
|
||||
<div class="arrow-function-visual">
|
||||
<div class="outer-context">
|
||||
<div class="context-title">外层作用域 (person)</div>
|
||||
<div class="context-title">
|
||||
外层作用域 (person)
|
||||
</div>
|
||||
<div class="context-content">
|
||||
<div class="context-item">this.name = "小红"</div>
|
||||
<div class="context-item">
|
||||
this.name = "小红"
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="arrow-capture">
|
||||
<div class="capture-title">箭头函数捕获外层 this</div>
|
||||
<div class="capture-arrow">↑ 继承 this</div>
|
||||
<div class="capture-title">
|
||||
箭头函数捕获外层 this
|
||||
</div>
|
||||
<div class="capture-arrow">
|
||||
↑ 继承 this
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="inner-context">
|
||||
<div class="context-title">箭头函数内部</div>
|
||||
<div class="context-title">
|
||||
箭头函数内部
|
||||
</div>
|
||||
<div class="context-content">
|
||||
<div class="context-item">this → 外层的 this</div>
|
||||
<div class="context-item">
|
||||
this → 外层的 this
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="rule-box">
|
||||
<div class="rule-title">规则:箭头函数</div>
|
||||
<div class="rule-title">
|
||||
规则:箭头函数
|
||||
</div>
|
||||
<div class="rule-content">
|
||||
箭头函数没有自己的 <code>this</code>,它继承外层作用域的 <code>this</code>
|
||||
</div>
|
||||
@@ -288,7 +473,9 @@
|
||||
</div>
|
||||
|
||||
<div class="quick-reference">
|
||||
<div class="reference-title">📋 this 指向速查表</div>
|
||||
<div class="reference-title">
|
||||
📋 this 指向速查表
|
||||
</div>
|
||||
<div class="reference-table">
|
||||
<div class="ref-row header">
|
||||
<span>调用方式</span>
|
||||
|
||||
Reference in New Issue
Block a user