久久精品中文字幕免费_91香蕉国产亚洲一区二区三区_国产精品巨作无遮拦_亚洲人成电影

    <center id="oy65s"><ol id="oy65s"></ol></center>

  • <menu id="oy65s"></menu>
    當(dāng)前位置:首頁 > 足球資訊 > 正文內(nèi)容

    vue源碼分析-基礎(chǔ)的數(shù)據(jù)代理檢測(cè)

    杏彩體育2年前 (2023-01-28)足球資訊65

    簡單回顧一下這個(gè)系列的前兩節(jié),前兩節(jié)花了大量的篇幅介紹了Vue的選項(xiàng)合并,選項(xiàng)合并是Vue實(shí)例初始化的開始,Vue為開發(fā)者提供了豐富的選項(xiàng)配置,而每個(gè)選項(xiàng)都嚴(yán)格規(guī)定了合并的策略。然而這只是初始化中的第一步,這一節(jié)我們將對(duì)另一個(gè)重點(diǎn)的概念深入的分析,他就是數(shù)據(jù)代理,我們知道Vue大量利用了代理的思想,而除了響應(yīng)式系統(tǒng)外,還有哪些場景也需要進(jìn)行數(shù)據(jù)代理呢?這是我們這節(jié)分析的重點(diǎn)。

    2.1 數(shù)據(jù)代理的含義

    數(shù)據(jù)代理的另一個(gè)說法是數(shù)據(jù)劫持,當(dāng)我們?cè)谠L問或者修改對(duì)象的某個(gè)屬性時(shí),數(shù)據(jù)劫持可以攔截這個(gè)行為并進(jìn)行額外的操作或者修改返回的結(jié)果。而我們知道Vue響應(yīng)式系統(tǒng)的核心就是數(shù)據(jù)代理,代理使得數(shù)據(jù)在訪問時(shí)進(jìn)行依賴收集,在修改更新時(shí)對(duì)依賴進(jìn)行更新,這是響應(yīng)式系統(tǒng)的核心思路。而這一切離不開Vue對(duì)數(shù)據(jù)做了攔截代理。然而響應(yīng)式并不是本節(jié)討論的重點(diǎn),這一節(jié)我們將看看數(shù)據(jù)代理在其他場景下的應(yīng)用。在分析之前,我們需要掌握兩種實(shí)現(xiàn)數(shù)據(jù)代理的方法: Object.defineProperty 和 Proxy。

    2.1.1 Object.defineProperty

    官方定義:Object.defineProperty()方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性, 并返回這個(gè)對(duì)象。

    基本用法:

    Object.defineProperty(obj, prop, descriptor)

    Object.defineProperty()可以用來精確添加或修改對(duì)象的屬性,只需要在descriptor對(duì)象中將屬性特性描述清楚,descriptor的屬性描述符有兩種形式,一種是數(shù)據(jù)描述符,另一種是存取描述符,我們分別看看各自的特點(diǎn)。

    數(shù)據(jù)描述符,它擁有四個(gè)屬性配置configurable:數(shù)據(jù)是否可刪除,可配置enumerable:屬性是否可枚舉value:屬性值,默認(rèn)為undefinedwritable:屬性是否可讀寫存取描述符,它同樣擁有四個(gè)屬性選項(xiàng)configurable:數(shù)據(jù)是否可刪除,可配置enumerable:屬性是否可枚舉get:一個(gè)給屬性提供 getter 的方法,如果沒有 getter 則為 undefined。set:一個(gè)給屬性提供 setter 的方法,如果沒有 setter 則為 undefined。

    需要注意的是: 數(shù)據(jù)描述符的value,writable 和 存取描述符中的get, set屬性不能同時(shí)存在,否則會(huì)拋出異常。 有了Object.defineProperty方法,我們可以方便的利用存取描述符中的getter/setter來進(jìn)行數(shù)據(jù)的監(jiān)聽,這也是響應(yīng)式構(gòu)建的雛形。getter方法可以讓我們?cè)谠L問數(shù)據(jù)時(shí)做額外的操作處理,setter方法使得我們可以在數(shù)據(jù)更新時(shí)修改返回的結(jié)果??纯聪旅娴睦?由于設(shè)置了數(shù)據(jù)代理,當(dāng)我們?cè)L問對(duì)象o的a屬性時(shí),會(huì)觸發(fā)getter執(zhí)行鉤子函數(shù),當(dāng)修改a屬性的值時(shí),會(huì)觸發(fā)setter鉤子函數(shù)去修改返回的結(jié)果。

    var o = {} var value; Object.defineProperty(o, a, { get() { console.log(獲取值) return value }, set(v) { console.log(設(shè)置值) value = qqq } }) o.a = sss // 設(shè)置值 console.log(o.a) // 獲取值 // qqq

    前面說到Object.defineProperty的get和set方法是對(duì)對(duì)象進(jìn)行監(jiān)測(cè)并響應(yīng)變化,那么數(shù)組類型是否也可以監(jiān)測(cè)呢,參照監(jiān)聽屬性的思路,我們用數(shù)組的下標(biāo)作為屬性,數(shù)組的元素作為攔截對(duì)象,看看Object.defineProperty是否可以對(duì)數(shù)組的數(shù)據(jù)進(jìn)行監(jiān)控?cái)r截。

    參考Vue3源碼視頻講解:進(jìn)入學(xué)習(xí)

    var arr = [1,2,3]; arr.forEach((item, index) => { Object.defineProperty(arr, index, { get() { console.log(數(shù)組被getter攔截) return item }, set(value) { console.log(數(shù)組被setter攔截) return item = value } }) }) arr[1] = 4; console.log(arr) // 結(jié)果 數(shù)組被setter攔截 數(shù)組被getter攔截 4

    顯然,已知長度的數(shù)組是可以通過索引屬性來設(shè)置屬性的訪問器屬性的。但是數(shù)組的添加確無法進(jìn)行攔截,這個(gè)也很好理解,不管是通過arr.push()還是arr[10] = 10添加的數(shù)據(jù),數(shù)組所添加的索引值并沒有預(yù)先加入數(shù)據(jù)攔截中,所以自然無法進(jìn)行攔截處理。這個(gè)也是使用Object.defineProperty進(jìn)行數(shù)據(jù)代理的弊端。為了解決這個(gè)問題,Vue在響應(yīng)式系統(tǒng)中對(duì)數(shù)組的方法進(jìn)行了重寫,間接的解決了這個(gè)問題,詳細(xì)細(xì)節(jié)可以參考后續(xù)的響應(yīng)式系統(tǒng)分析。

    另外如果需要攔截的對(duì)象屬性嵌套多層,如果沒有遞歸去調(diào)用Object.defineProperty進(jìn)行攔截,深層次的數(shù)據(jù)也依然無法監(jiān)測(cè)。

    2.1.2 Proxy

    為了解決像數(shù)組這類無法進(jìn)行數(shù)據(jù)攔截,以及深層次的嵌套問題,es6引入了Proxy的概念,它是真正在語言層面對(duì)數(shù)據(jù)攔截的定義。和Object.defineProperty一樣,Proxy可以修改某些操作的默認(rèn)行為,但是不同的是,Proxy針對(duì)目標(biāo)對(duì)象會(huì)創(chuàng)建一個(gè)新的實(shí)例對(duì)象,并將目標(biāo)對(duì)象代理到新的實(shí)例對(duì)象上,。 本質(zhì)的區(qū)別是后者會(huì)創(chuàng)建一個(gè)新的對(duì)象對(duì)原對(duì)象做代理,外界對(duì)原對(duì)象的訪問,都必須先通過這層代理進(jìn)行攔截處理。而攔截的結(jié)果是我們只要通過操作新的實(shí)例對(duì)象就能間接的操作真正的目標(biāo)對(duì)象了。針對(duì)Proxy,下面是基礎(chǔ)的寫法:

    var obj = {} var nobj = new Proxy(obj, { get(target, key, receiver) { console.log(獲取值) return Reflect.get(target, key, receiver) }, set(target, key, value, receiver) { console.log(設(shè)置值) return Reflect.set(target, key, value, receiver) } }) nobj.a = 代理 console.log(obj) // 結(jié)果 設(shè)置值 {a: "代理"}

    上面的get,set是Proxy支持的攔截方法,而Proxy 支持的攔截操作有13種之多,具體可以參照ES6-Proxy文檔,前面提到,Object.defineProperty的getter和setter方法并不適合監(jiān)聽攔截?cái)?shù)組的變化,那么新引入的Proxy又能否做到呢?我們看下面的例子。

    var arr = [1, 2, 3] let obj = new Proxy(arr, { get: function (target, key, receiver) { // console.log("獲取數(shù)組元素" + key); return Reflect.get(target, key, receiver); }, set: function (target, key, receiver) { console.log(設(shè)置數(shù)組); return Reflect.set(target, key, receiver); } }) // 1. 改變已存在索引的數(shù)據(jù) obj[2] = 3 // result: 設(shè)置數(shù)組 // 2. push,unshift添加數(shù)據(jù) obj.push(4) // result: 設(shè)置數(shù)組 * 2 (索引和length屬性都會(huì)觸發(fā)setter) // // 3. 直接通過索引添加數(shù)組 obj[5] = 5 // result: 設(shè)置數(shù)組 * 2 // // 4. 刪除數(shù)組元素 obj.splice(1, 1)

    顯然Proxy完美的解決了數(shù)組的監(jiān)聽檢測(cè)問題,針對(duì)數(shù)組添加數(shù)據(jù),刪除數(shù)據(jù)的不同方法,代理都能很好的攔截處理。另外Proxy也很好的解決了深層次嵌套對(duì)象的問題,具體讀者可以自行舉例分析。

    2.2 initProxy

    數(shù)據(jù)攔截的思想除了為構(gòu)建響應(yīng)式系統(tǒng)準(zhǔn)備,它也可以為數(shù)據(jù)進(jìn)行篩選過濾,我們接著往下看初始化的代碼,在合并選項(xiàng)后,vue接下來會(huì)為vm實(shí)例設(shè)置一層代理,這層代理可以為vue在模板渲染時(shí)進(jìn)行一層數(shù)據(jù)篩選,這個(gè)過程究竟怎么發(fā)生的,我們看代碼的實(shí)現(xiàn)。

    Vue.prototype._init = function(options) { // 選項(xiàng)合并 ... { // 對(duì)vm實(shí)例進(jìn)行一層代理 initProxy(vm); } ... }

    initProxy的實(shí)現(xiàn)如下:

    // 代理函數(shù) var initProxy = function initProxy (vm) { if (hasProxy) { var options = vm.$options; var handlers = options.render && options.render._withStripped ? getHandler : hasHandler; // 代理vm實(shí)例到vm屬性_renderProxy vm._renderProxy = new Proxy(vm, handlers); } else { vm._renderProxy = vm; } };

    首先是判斷瀏覽器是否支持原生的proxy。

    var hasProxy = typeof Proxy !== undefined && isNative(Proxy);

    當(dāng)瀏覽器支持Proxy時(shí),vm._renderProxy會(huì)代理vm實(shí)例,并且代理過程也會(huì)隨著參數(shù)的不同呈現(xiàn)不同的效果;當(dāng)瀏覽器不支持Proxy時(shí),直接將vm賦值給vm._renderProxy。

    讀到這里,我相信大家會(huì)有很多的疑惑。 1. 這層代理的訪問時(shí)機(jī)是什么,也就是說什么場景會(huì)觸發(fā)這層代理 2. 參數(shù)options.render._withStripped代表著什么,getHandler和hasHandler又有什么不同。 3. 如何理解為模板數(shù)據(jù)的訪問進(jìn)行數(shù)據(jù)篩選過濾。到底有什么數(shù)據(jù)需要過濾。 4. 只有在支持原生proxy環(huán)境下才會(huì)建立這層代理,那么在舊的瀏覽器,非法的數(shù)據(jù)又將如何展示。

    帶著這些疑惑,我們接著往下分析。

    2.2.1 觸發(fā)代理

    源碼中vm._renderProxy的使用出現(xiàn)在Vue實(shí)例的_render方法中,Vue.prototype._render是將渲染函數(shù)轉(zhuǎn)換成Virtual DOM的方法,這部分是關(guān)于實(shí)例的掛載和模板引擎的解析,筆者并不會(huì)在這一章節(jié)中深入分析,我們只需要先有一個(gè)認(rèn)知,Vue內(nèi)部在js和真實(shí)DOM節(jié)點(diǎn)中設(shè)立了一個(gè)中間層,這個(gè)中間層就是Virtual DOM,遵循js -> virtual -> 真實(shí)dom的轉(zhuǎn)換過程,而Vue.prototype._render是前半段的轉(zhuǎn)換,當(dāng)我們調(diào)用render函數(shù)時(shí),代理的vm._renderProxy對(duì)象便會(huì)訪問到。

    Vue.prototype._render = function () { ··· // 調(diào)用vm._renderProxy vnode = render.call(vm._renderProxy, vm.$createElement); }

    那么代理的處理函數(shù)又是什么?我們回過頭看看代理選項(xiàng)handlers的實(shí)現(xiàn)。 handers函數(shù)會(huì)根據(jù) options.render._withStripped的不同執(zhí)行不同的代理函數(shù),當(dāng)使用類似webpack這樣的打包工具時(shí),通常會(huì)使用vue-loader插件進(jìn)行模板的編譯,這個(gè)時(shí)候options.render是存在的,并且_withStripped的屬性也會(huì)設(shè)置為true(關(guān)于編譯版本和運(yùn)行時(shí)版本的區(qū)別可以參考后面章節(jié)),所以此時(shí)代理的選項(xiàng)是hasHandler,在其他場景下,代理的選項(xiàng)是getHandler。getHandler,hasHandler的邏輯相似,我們只分析使用vue-loader場景下hasHandler的邏輯。另外的邏輯,讀者可以自行分析。

    var hasHandler = { // key in obj或者with作用域時(shí),會(huì)觸發(fā)has的鉤子 has: function has (target, key) { ··· } };

    hasHandler函數(shù)定義了has的鉤子,前面介紹過,proxy的鉤子有13個(gè)之多,而has是其中一個(gè),它用來攔截propKey in proxy的操作,返回一個(gè)布爾值。而除了攔截 in 操作符外,has鉤子同樣可以用來攔截with語句下的作用對(duì)象。例如:

    var obj = { a: 1 } var nObj = new Proxy(obj, { has(target, key) { console.log(target) // { a: 1 } console.log(key) // a return true } }) with(nObj) { a = 2 }

    那么這兩個(gè)觸發(fā)條件是否跟_render過程有直接的關(guān)系呢?答案是肯定的。vnode = render.call(vm._renderProxy, vm.$createElement);的主體是render函數(shù),而這個(gè)render函數(shù)就是包裝成with的執(zhí)行語句,在執(zhí)行with語句的過程中,該作用域下變量的訪問都會(huì)觸發(fā)has鉤子,這也是模板渲染時(shí)之所有會(huì)觸發(fā)代理攔截的原因。我們通過代碼來觀察render函數(shù)的原形。

    var vm = new Vue({ el: #app }) console.log(vm.$options.render) //輸出, 模板渲染使用with語句 ? anonymous() { with(this){return _c(div,{attrs:{"id":"app"}},[_v(_s(message)+_s(_test))])} }

    2.2.2 數(shù)據(jù)過濾

    我們已經(jīng)大致知道了Proxy代理的訪問時(shí)機(jī),那么設(shè)置這層代理的作用又在哪里呢?首先思考一個(gè)問題,我們通過data選項(xiàng)去設(shè)置實(shí)例數(shù)據(jù),那么這些數(shù)據(jù)可以隨著個(gè)人的習(xí)慣任意命名嗎?顯然不是的,如果你使用js的關(guān)鍵字(像Object,Array,NaN)去命名,這是不被允許的。另一方面,Vue源碼內(nèi)部使用了以$,_作為開頭的內(nèi)部變量,所以以$,_開頭的變量名也是不被允許的,這就構(gòu)成了數(shù)據(jù)過濾監(jiān)測(cè)的前提。接下來我們具體看hasHandler的細(xì)節(jié)實(shí)現(xiàn)。

    var hasHandler = { has: function has (target, key) { var has = key in target; // isAllowed用來判斷模板上出現(xiàn)的變量是否合法。 var isAllowed = allowedGlobals(key) || (typeof key === string && key.charAt(0) === _ && !(key in target.$data)); // _和$開頭的變量不允許出現(xiàn)在定義的數(shù)據(jù)中,因?yàn)樗莢ue內(nèi)部保留屬性的開頭。 // 1. warnReservedPrefix: 警告不能以$ _開頭的變量 // 2. warnNonPresent: 警告模板出現(xiàn)的變量在vue實(shí)例中未定義 if (!has && !isAllowed) { if (key in target.$data) { warnReservedPrefix(target, key); } else { warnNonPresent(target, key); } } return has || !isAllowed } }; // 模板中允許出現(xiàn)的非vue實(shí)例定義的變量 var allowedGlobals = makeMap( Infinity,undefined,NaN,isFinite,isNaN, + parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent, + Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl, + require // for Webpack/Browserify );

    首先allowedGlobals定義了javascript保留的關(guān)鍵字,這些關(guān)鍵字是不允許作為用戶變量存在的。(typeof key === string && key.charAt(0) === _ && !(key in target.$data)的邏輯對(duì)以$,_開頭,或者是否是data中未定義的變量做判斷過濾。這里對(duì)未定義變量的場景多解釋幾句,前面說到,代理的對(duì)象vm.renderProxy是在執(zhí)行_render函數(shù)中訪問的,而在使用了template模板的情況下,render函數(shù)是對(duì)模板的解析結(jié)果,換言之,之所以會(huì)觸發(fā)數(shù)據(jù)代理攔截是因?yàn)槟0逯惺褂昧俗兞?,例?lt;div>{{message}}}</div>。而如果我們?cè)谀0逯惺褂昧宋炊x的變量,這個(gè)過程就被proxy攔截,并定義為不合法的變量使用。

    我們可以看看兩個(gè)報(bào)錯(cuò)信息的源代碼(是不是很熟悉):

    // 模板使用未定義的變量 var warnNonPresent = function (target, key) { warn( "Property or method \"" + key + "\" is not defined on the instance but " + referenced during render. Make sure that this property is reactive, + either in the data option, or for class-based components, by + initializing the property. + See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties., target ); }; // 使用$,_開頭的變量 var warnReservedPrefix = function (target, key) { warn( "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " + properties starting with "$" or "_" are not proxied in the Vue instance to + prevent conflicts with Vue internals + See: https://vuejs.org/v2/api/#data, target ); };

    分析到這里,前面的疑惑只剩下最后一個(gè)問題。只有在瀏覽器支持proxy的情況下,才會(huì)執(zhí)行initProxy設(shè)置代理,那么在不支持的情況下,數(shù)據(jù)過濾就失效了,此時(shí)非法的數(shù)據(jù)定義還能正常運(yùn)行嗎?我們先對(duì)比下面兩個(gè)結(jié)論。

    // 模板中使用_開頭的變量,且在data選項(xiàng)中有定義 <div id="app">{{_test}}</div> new Vue({ el: #app, data: { _test: proxy } })
    支持proxy瀏覽器的結(jié)果
    不支持proxy瀏覽器的結(jié)果

    顯然,在沒有經(jīng)過代理的情況下,使用_開頭的變量依舊會(huì) 報(bào)錯(cuò),但是它變成了js語言層面的錯(cuò)誤,表示該變量沒有被聲明。但是這個(gè)報(bào)錯(cuò)無法在Vue這一層知道錯(cuò)誤的詳細(xì)信息,而這就是能使用Proxy的好處。接著我們會(huì)思考,既然已經(jīng)在data選項(xiàng)中定義了_test變量,為什么訪問時(shí)還是找不到變量的定義呢? 原來在初始化數(shù)據(jù)階段,Vue已經(jīng)為數(shù)據(jù)進(jìn)行了一層篩選的代理。具體看initData對(duì)數(shù)據(jù)的代理,其他實(shí)現(xiàn)細(xì)節(jié)不在本節(jié)討論范圍內(nèi)。

    function initData(vm) { vm._data = typeof data === function ? getData(data, vm) : data || {} if (!isReserved(key)) { // 數(shù)據(jù)代理,用戶可直接通過vm實(shí)例返回data數(shù)據(jù) proxy(vm, "_data", key); } } function isReserved (str) { var c = (str + ).charCodeAt(0); // 首字符是$, _的字符串 return c === 0x24 || c === 0x5F }

    vm._data可以拿到最終data選項(xiàng)合并的結(jié)果,isReserved會(huì)過濾以$,_開頭的變量,proxy會(huì)為實(shí)例數(shù)據(jù)的訪問做代理,當(dāng)我們?cè)L問this.message時(shí),實(shí)際上訪問的是this._data.message,而有了isReserved的篩選,即使this._data._test存在,我們依舊無法在訪問this._test時(shí)拿到_test變量。這就解釋了為什么會(huì)有變量沒有被聲明的語法錯(cuò)誤,而proxy的實(shí)現(xiàn),又是基于上述提到的Object.defineProperty來實(shí)現(xiàn)的。

    function proxy (target, sourceKey, key) { sharedPropertyDefinition.get = function proxyGetter () { // 當(dāng)訪問this[key]時(shí),會(huì)代理訪問this._data[key]的值 return this[sourceKey][key] }; sharedPropertyDefinition.set = function proxySetter (val) { this[sourceKey][key] = val; }; Object.defineProperty(target, key, sharedPropertyDefinition); }

    2.3 小結(jié)

    這一節(jié)內(nèi)容,詳細(xì)的介紹了數(shù)據(jù)代理在Vue的實(shí)現(xiàn)思路和另一個(gè)應(yīng)用場景,數(shù)據(jù)代理是一種設(shè)計(jì)模式,也是一種編程思想,Object.defineProperty和Proxy都可以實(shí)現(xiàn)數(shù)據(jù)代理,但是他們各有優(yōu)劣,前者兼容性較好,但是卻無法對(duì)數(shù)組或者嵌套的對(duì)象進(jìn)行代理監(jiān)測(cè),而Proxy基本可以解決所有的問題,但是對(duì)兼容性要求很高。Vue中的響應(yīng)式系統(tǒng)是以O(shè)bject.defineProperty實(shí)現(xiàn)的,但是這并不代表沒有Proxy的應(yīng)用。initProxy就是其中的例子,這層代理會(huì)在模板渲染時(shí)對(duì)一些非法或者沒有定義的變量進(jìn)行篩選判斷,和沒有數(shù)據(jù)代理相比,非法的數(shù)據(jù)定義錯(cuò)誤會(huì)提前到應(yīng)用層捕獲,這也有利于開發(fā)者對(duì)錯(cuò)誤的排查。

    掃描二維碼推送至手機(jī)訪問。

    版權(quán)聲明:本文由財(cái)神資訊-領(lǐng)先的體育資訊互動(dòng)媒體轉(zhuǎn)載發(fā)布,如需刪除請(qǐng)聯(lián)系。

    本文鏈接:http://www.daniuzhishi.com/?id=44535

    “vue源碼分析-基礎(chǔ)的數(shù)據(jù)代理檢測(cè)” 的相關(guān)文章

    足球——H組:烏拉圭戰(zhàn)平韓國(5)

    足球——H組:烏拉圭戰(zhàn)平韓國(5)

    當(dāng)日,在卡塔爾賴揚(yáng)教育城球場進(jìn)行的2022卡塔爾世界杯足球賽H組比賽中,烏拉圭隊(duì)以0比0戰(zhàn)平韓國隊(duì)。...

    足球,不是把球踢進(jìn)門里那么簡單

    足球,不是把球踢進(jìn)門里那么簡單

    ▲“人,如果沒有了夢(mèng)想,那和咸魚有什么區(qū)別?”這是周星馳的《少林足球》里最廣為流傳的一句話。有了夢(mèng)想之后呢?(全景/ 圖) “純粹的足球”似乎應(yīng)該理解為一種運(yùn)動(dòng),但事實(shí)上,足球從來無法那么簡單,因?yàn)樗休d著數(shù)億人的喜怒哀樂、無差別地牽動(dòng)著各類人的神經(jīng),所以它必然要承擔(dān)更大...

    球探體育比分:利桑德羅:海因策是我的偶像 我會(huì)一直為球隊(duì)挺身而出

    球探體育比分:利桑德羅:海因策是我的偶像 我會(huì)一直為球隊(duì)挺身而出

    點(diǎn)擊上方藍(lán)字,獲取更多大神球料。  曼聯(lián)中衛(wèi)利桑德羅-馬丁內(nèi)斯今天接受了采訪,并談到了球隊(duì)和自己的風(fēng)格。 利桑德羅說道:“感受到球迷的這份愛讓我非常激動(dòng),這種愛也是相互的。我真的很開心,因?yàn)槲沂菑臒o到有的,來到曼聯(lián)這支世界最佳俱樂部之一真的非常特別?!?“...

    球探網(wǎng)足球即時(shí)比分:魯能又掀起中超一浪潮!爭冠保級(jí)都好用!

    球探網(wǎng)足球即時(shí)比分:魯能又掀起中超一浪潮!爭冠保級(jí)都好用!

      眾所周知,中超聯(lián)賽是一個(gè)非常復(fù)雜的聯(lián)賽。因?yàn)橹袊牡卮笪锊?,所以?dǎo)致中超的各支球隊(duì)也有著自己獨(dú)特的風(fēng)格。但是有一些球隊(duì)的戰(zhàn)術(shù)打法還是能夠引領(lǐng)潮流的,因?yàn)楹唵螌?shí)用還能辦大事,自然是能夠被大家認(rèn)可和效仿。比如本賽季的山東魯能,他們的打法就成了中超的一個(gè)標(biāo)桿,于是乎爭冠的球員和保級(jí)的球隊(duì)紛紛...

    世界杯競彩足球玩法大全,小白到老司機(jī)的晉級(jí)之路,建議收藏

    世界杯競彩足球玩法大全,小白到老司機(jī)的晉級(jí)之路,建議收藏

    世界杯還有不到一個(gè)月就來了,這期間全世界的熱點(diǎn)都將聚焦在這個(gè)星球上最大的體育賽事上。俗話說搏一搏單車變摩托,這個(gè)時(shí)候無論是資深球迷還是小白偽球迷都會(huì)玩上兩把競彩,畢竟足球配啤酒再加上競彩才是這個(gè)夏季盛宴的標(biāo)配。 而球天下為大家匯總了一篇關(guān)于中國競彩足球...

    9.15 【競彩足球】【歐冠】【巴黎圣日耳曼】【梅西】【梅西轉(zhuǎn)會(huì)巴黎,歐冠首秀】【歐冠小組賽:布魯日VS巴黎圣日耳曼】 賽事分析預(yù)測(cè)推薦 【曼聯(lián)】【C羅進(jìn)球】【哈蘭德】更多精彩敬請(qǐng)期待——【球王推薦】

    9.15 【競彩足球】【歐冠】【巴黎圣日耳曼】【梅西】【梅西轉(zhuǎn)會(huì)巴黎,歐冠首秀】【歐冠小組賽:布魯日VS巴黎圣日耳曼】 賽事分析預(yù)測(cè)推薦 【曼聯(lián)】【C羅進(jìn)球】【哈蘭德】更多精彩敬請(qǐng)期待——【球王推薦】

    歐冠首輪——曼聯(lián)1:2年輕人 C羅進(jìn)球,曼聯(lián)1:2被逆轉(zhuǎn),絕殺! 爆冷輸給年輕人!曼聯(lián)遭遇歐冠小組賽開門黑! 巴塞羅那0:3拜仁慕尼黑 再添新恨??! 歐冠 小組賽第一輪 布魯日VS巴黎圣日耳曼 比賽時(shí)間 2021-09-16 03:00 【...

    ?