欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 框架設(shè)計(jì) 第二版

Javascript框架的設(shè)計(jì)是一個(gè)十分重要的話題,在現(xiàn)代web開(kāi)發(fā)中,設(shè)計(jì)出一款優(yōu)秀的框架可以極大的提升開(kāi)發(fā)效率并且降低錯(cuò)誤率。本文將詳細(xì)介紹javascript框架設(shè)計(jì)的第二版,帶有實(shí)際案例和代碼解析。

在第二版Javascript框架設(shè)計(jì)中,最重要的改進(jìn)就是使用ES6中的class和extends關(guān)鍵字來(lái)進(jìn)行面向?qū)ο缶幊獭O旅嫖覀儊?lái)以Vue.js 2.0框架為例子,來(lái)看看這種面向?qū)ο缶幊痰木唧w實(shí)現(xiàn)。

class Vue {
constructor(options) {
this.$options = options
this._data = options.data
this.observe(this._data)
new Compile(options.el, this)
}
observe(data) {
Object.keys(data).forEach(key =>{
let dep = new Dep()
let val = data[key]
Object.defineProperty(data, key, {
enumerable: true,
configurable: true,
get: () =>{
if (Dep.target) {
dep.add(Dep.target)
}
return val
},
set: newVal =>{
if (newVal === val || (newVal !== newVal && val !== val)) {
return
}
val = newVal
dep.notify()
}
})
})
}
$watch(exp, cb) {
new Watcher(this, exp, cb)
}
}
class Dep {
constructor() {
this.subs = []
}
add(sub) {
this.subs.push(sub)
}
notify() {
this.subs.forEach(sub =>{
sub.update()
})
}
}
class Watcher {
constructor(vm, exp, cb) {
this.vm = vm
this.exp = exp
this.cb = cb
this.value = this.get()
}
get() {
Dep.target = this
let value = this.vm._data[this.exp]
Dep.target = null
return value
}
update() {
let newVal = this.vm._data[this.exp]
if (newVal !== this.value) {
this.value = newVal
this.cb.call(this.vm)
}
}
}

我們可以看出,在Vue.js 2.0中,使用了class來(lái)定義一個(gè)叫做Vue的類。這個(gè)類有兩個(gè)重要的屬性:$options和_data。它的構(gòu)造函數(shù)接受一個(gè)options參數(shù),并且在構(gòu)造函數(shù)內(nèi)部會(huì)使用observe方法對(duì)data進(jìn)行數(shù)據(jù)劫持,最后使用new Compile來(lái)編譯DOM。

在這段實(shí)現(xiàn)中,還有兩個(gè)很重要的類:Dep和Watcher。其中,Dep是一個(gè)發(fā)布訂閱的類,它的作用是收集所有需要更新的Watcher,并在數(shù)據(jù)變動(dòng)時(shí)通知Watcher進(jìn)行更新。而Watcher則是一個(gè)觀察者類,它在初始化時(shí)會(huì)根據(jù)表達(dá)式exp來(lái)記錄需要進(jìn)行監(jiān)控的數(shù)據(jù),并在數(shù)據(jù)變動(dòng)時(shí)通知Dep進(jìn)行更新。

另外,Vue.js 2.0框架還使用了ES6中的箭頭函數(shù)( =>)來(lái)優(yōu)化代碼。在observe方法中,我們使用箭頭函數(shù)來(lái)簡(jiǎn)化閉包函數(shù)的使用,從而使得代碼更加簡(jiǎn)潔。

除了class和箭頭函數(shù)之外,Vue.js 2.0框架還使用了模板字符串的語(yǔ)法來(lái)簡(jiǎn)化字符串拼接的代碼。下面是一個(gè)簡(jiǎn)單的例子:

let str1 = "Hello"
let str2 = "World"
console.log(`Message: ${str1} ${str2}!`)

在上面的例子中,我們使用了模板字符串來(lái)簡(jiǎn)化兩個(gè)字符串之間的拼接。這樣做可以避免使用復(fù)雜的字符串拼接函數(shù),并且代碼更加易讀。

總的來(lái)說(shuō),在第二版Javascript框架設(shè)計(jì)中,面向?qū)ο缶幊坛蔀榱艘环N很常見(jiàn)的編程風(fēng)格。使用class和extends關(guān)鍵字可以讓我們更加方便地定義類、繼承類,并且可以避免一些面向過(guò)程編程中的風(fēng)險(xiǎn)。此外,箭頭函數(shù)和模板字符串的使用也可以使得代碼更加簡(jiǎn)潔明了。