🌰
- 例如你在星巴克点了咖啡,此时你并不需要在吧台坐等,你只需要回到位子上玩手机,等咖啡好了服务员会叫你。不光叫你,其他人的咖啡好了,服务员也会叫他们来取
- DOM事件,注册完之后就不用管了,什么时候事件触发了,就会执行里面的code
-
演示
```typescript // 主题 class Subject { private state: number = 0 private observers: Observer[] = []
getState(): number { return this.state }
setState(newState: number): void { this.state = newState; this.notify(); }
attach(observer: Observer): void { this.observers.push(observer); }
private notify() { this.observers.forEach(observer => {
observer.update(this.state);
}) } }
// 观察者
class Observer {
name: string
constructor(name: string) {
this.name = name;
}
update(state: number) {
console.log(观察者${this.name}接到了通知,内容是${state})
}
}
const sub = new Subject(); const observer_1 = new Observer(‘A’); const observer_2 = new Observer(‘B’);
sub.attach(observer_1); sub.attach(observer_2); sub.setState(20);
// 执行结果 // ‘观察者A接到了通知,内容是20’ // ‘观察者B接到了通知,内容是20’
<br />**是否符合设计原则**- Observe 和 Subject 分离,解耦- Observer 可以自由扩展- Subject 可自由扩展<a name="A8Geh"></a># 场景- DOM 事件- Vue React 组件生命周期- Vue watch- Vue 组件更新过程- 各种异步回调- MutationObserve<a name="qToS4"></a>## DOM 事件```html<button id="btn1">btn</button><script>const $btn1 = $('#btn1');$btn1.click(function () {console.log(1);})$btn1.click(function() {console.log(2);})</script>
vue watch
{data() {name: '双越',info: {city: 'BeiJing'}},watch: {name(newVal, val) {console.log(newVal, val);},// 或者name: {handler(newVal, val){console.log(newVal, val);},immediate: true // 初始化就会触发},info: {handler(newVal, val) {console.log(newVal, val);},deep: true // 深度监听}},methods: {changeName() {this.name = '双越.name' + new Date().getTime();}}}
<script setup>import { ref, watch, watchEffect, reactive } from 'vue';const nameRef = ref('双越');const state = reactive({info: { city: '北京' }})watch([nameRef], (newVals, vals) => {console.log('name', newVals, vals);});watch(() => state, () => {console.log(state.info.city)}, {deep: true})watchEffect(() => { // 会立即触发console.log(nameRef.value)})function changeName() {nameRef.value = Date.now();}</script><template><p>name: {{ nameRef }}</p><button @click="changeName">change name</button></template>
Vue 组件更新过程
各种异步回调函数
- 定时器 setTimeout setInterval
- Promise.then
- Nodejs - stream readline httpServer
