久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器

瀏覽:133日期:2023-10-11 08:04:28

如果給你下面這樣一個代碼片段(動態(tài)獲取的代碼字符串),讓你在前端動態(tài)引入這個模塊并執(zhí)行里面的函數(shù),你會如何處理呢?

module.exports = { name : ’ConardLi’, action : function(){ console.log(this.name); } };

node 環(huán)境的執(zhí)行

如果在 node 環(huán)境,我們可能會很快的想到使用 Module 模塊, Module 模塊中有一個私有函數(shù) _compile,可以動態(tài)的加載一個模塊:

export function getRuleFromString(code) { const myModule = new Module(’my-module’); myModule._compile(code,’my-module’); return myModule.exports; }

實現(xiàn)就是這么簡單,后面我們會回顧一下 _compile 函數(shù)的原理,但是需求可不是這么簡單,我們?nèi)绻谇岸谁h(huán)境動態(tài)引入這段代碼呢?

嗯,你沒聽錯,最近正好碰到了這樣的需求,需要在前端和 Node 端抹平動態(tài)引入模塊的邏輯,好,下面我們來模仿 Module 模塊實現(xiàn)一個前端環(huán)境的 JavaScript 模塊執(zhí)行器。

首先我們先來回顧一下 node 中的模塊加載原理。

node Module 模塊加載原理

Node.js 遵循 CommonJS 規(guī)范,該規(guī)范的核心思想是允許模塊通過 require 方法來同步加載所要依賴的其他模塊,然后通過 exports 或 module.exports 來導(dǎo)出需要暴露的接口。其主要是為了解決 JavaScript 的作用域問題而定義的模塊形式,可以使每個模塊它自身的命名空間中執(zhí)行。

再在每個 NodeJs 模塊中,我們都能取到 module、exports、__dirname、__filename 和 require 這些模塊。并且每個模塊的執(zhí)行作用域都是相互隔離的,互不影響。

其實上面整個模塊系統(tǒng)的核心就是 Module 類的 _compile 方法,我們直接來看 _compile 的源碼:

Module.prototype._compile = function(content, filename) { // 去除 Shebang 代碼 content = internalModule.stripShebang(content); // 1.創(chuàng)建封裝函數(shù) var wrapper = Module.wrap(content); // 2.在當(dāng)前上下文編譯模塊的封裝函數(shù)代碼 var compiledWrapper = vm.runInThisContext(wrapper, { filename: filename, lineOffset: 0, displayErrors: true }); var dirname = path.dirname(filename); var require = internalModule.makeRequireFunction(this); var depth = internalModule.requireDepth; // 3.運行模塊的封裝函數(shù)并傳入 module、exports、__dirname、__filename、require var result = compiledWrapper.call(this.exports, this.exports, require, this, filename, dirname); return result; };

整個執(zhí)行過程我將其分為三步:

創(chuàng)建封裝函數(shù)

第一步即調(diào)用 Module 內(nèi)部的 wrapper 函數(shù)對模塊的原始內(nèi)容進(jìn)行封裝,我們先來看看 wrapper 函數(shù)的實現(xiàn):

Module.wrap = function(script) { return Module.wrapper[0] + script + Module.wrapper[1]; }; Module.wrapper = [ ’(function (exports, require, module, __filename, __dirname) { ’, ’n});’ ];

CommonJS 的主要目的就是解決 JavaScript 的作用域問題,可以使每個模塊它自身的命名空間中執(zhí)行。在沒有模塊化方案的時候,我們一般會創(chuàng)建一個自執(zhí)行函數(shù)來避免變量污染:

(function(global){ // 執(zhí)行代碼。。 })(window)

所以這一步至關(guān)重要,首先 wrapper 函數(shù)就將模塊本身的代碼片段包裹在一個函數(shù)作用域內(nèi),并且將我們需要用到的對象作為參數(shù)引入。所以上面的代碼塊被包裹后就變成了:

(function (exports, require, module, __filename, __dirname) { module.exports = { name : ’ConardLi’, action : function(){ console.log(this.name); } }; });

編譯封裝函數(shù)代碼

NodeJs 中的 vm 模塊提供了一系列 API 用于在 V8 虛擬機(jī)環(huán)境中編譯和運行代碼。JavaScript 代碼可以被編譯并立即運行,或編譯、保存然后再運行。

vm.runInThisContext() 在當(dāng)前的 global 對象的上下文中編譯并執(zhí)行 code,最后返回結(jié)果。運行中的代碼無法獲取本地作用域,但可以獲取當(dāng)前的 global 對象。

var compiledWrapper = vm.runInThisContext(wrapper, { filename: filename, lineOffset: 0, displayErrors: true });

所以以上代碼執(zhí)行后,就將代碼片段字符串編譯成了一個真正的可執(zhí)行函數(shù):

(function (exports, require, module, __filename, __dirname) { module.exports = { name : ’ConardLi’, action : function(){ console.log(this.name); } }; });

運行封裝函數(shù)

最后通過 call 來執(zhí)行編譯得到的可執(zhí)行函數(shù),并傳入對應(yīng)的對象。

var result = compiledWrapper.call(this.exports, this.exports, require, this, filename, dirname);

所以看到這里你應(yīng)該會明白,我們在模塊中拿到的 module,就是 Module 模塊的實例本身,我們直接調(diào)用的 exports 實際上是 module.exports 的引用,所以我們既可以使用 module.exports 也可以使用 exports 來導(dǎo)出一個模塊。

實現(xiàn) Module 模塊

如果我們想在前端環(huán)境執(zhí)行一個 CommonJS 模塊,那么我們只需要手動實現(xiàn)一個 Module 模塊就好了,重新梳理上面的流程,如果只考慮模塊代碼塊動態(tài)引入的邏輯,我們可以抽象出下面的代碼:

export default class Module { exports = {} wrapper = [ ’return (function (exports, module) { ’, ’n});’ ]; wrap(script) { return `${this.wrapper[0]} ${script} ${this.wrapper[1]}`; }; compile(content) { const wrapper = this.wrap(content); const compiledWrapper = vm.runInContext(wrapper); compiledWrapper.call(this.exports, this.exports, this); } }

這里有個問題,在瀏覽器環(huán)境是沒有 VM 這個模塊的,VM 會將代碼加載到一個上下文環(huán)境中,置入沙箱(sandbox),讓代碼的整個操作執(zhí)行都在封閉的上下文環(huán)境中進(jìn)行,我們需要自己實現(xiàn)一個瀏覽器環(huán)境的沙箱。

實現(xiàn)瀏覽器沙箱

eval

在瀏覽器執(zhí)行一段代碼片段,我們首先想到的可能就是 eval, eval 函數(shù)可以將一個 Javascript 字符串視作代碼片段執(zhí)行。

但是,由 eval() 執(zhí)行的代碼能夠訪問閉包和全局作用域,這會導(dǎo)致被稱為代碼注入 code injection 的安全隱患, eval 雖然好用,但是經(jīng)常被濫用,是 JavaScript 最臭名昭著的功能之一。

所以,后來又出現(xiàn)了很多在沙箱而非全局作用域中的執(zhí)行字符串代碼的值的替代方案。

new Function()

Function 構(gòu)造器是 eval() 的一個替代方案。new Function(...args, ’funcBody’) 對傳入的 ’funcBody’ 字符串進(jìn)行求值,并返回執(zhí)行這段代碼的函數(shù)。

fn = new Function(...args, ’functionBody’);

返回的 fn 是一個定義好的函數(shù),最后一個參數(shù)為函數(shù)體。它和 eval 有兩點區(qū)別:

fn 是一段編譯好的代碼,可以直接執(zhí)行,而 eval 需要編譯一次 fn 沒有對所在閉包的作用域訪問權(quán)限,不過它依然能夠訪問全局作用域

但是這仍然不能解決訪問全局作用域的問題。

with 關(guān)鍵詞

如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器

with 是 JavaScript 一個冷門的關(guān)鍵字。它允許一個半沙箱的運行環(huán)境。with 代碼塊中的代碼會首先試圖從傳入的沙箱對象獲得變量,但是如果沒找到,則會在閉包和全局作用域中尋找。閉包作用域的訪問可以用new Function() 來避免,所以我們只需要處理全局作用域。with 內(nèi)部使用 in 運算符。在塊中訪問每個變量,都會使用 variable in sandbox 條件進(jìn)行判斷。若條件為真,則從沙箱對象中讀取變量。否則,它會在全局作用域中尋找變量。

function compileCode(src) { src = ’with (sandbox) {’ + src + ’}’ return new Function(’sandbox’, src) }

試想,如果 variable in sandbox 條件永遠(yuǎn)為真,沙箱環(huán)境不就永遠(yuǎn)也讀取不到環(huán)境變量了嗎?所以我們需要劫持沙箱對象的屬性,讓所有的屬性永遠(yuǎn)都能讀取到。

Proxy

如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器

ES6 中提供了一個 Proxy 函數(shù),它是訪問對象前的一個攔截器,我們可以利用 Proxy 來攔截 sandbox 的屬性,讓所有的屬性都可以讀取到:

function compileCode(code) { code = ’with (sandbox) {’ + code + ’}’; const fn = new Function(’sandbox’, code); return (sandbox) => { const proxy = new Proxy(sandbox, { has() { return true; } }); return fn(proxy); } }

Symbol.unscopables

Symbol.unscopables 是一個著名的標(biāo)記。一個著名的標(biāo)記即是一個內(nèi)置的 JavaScript Symbol,它可以用來代表內(nèi)部語言行為。

Symbol.unscopables 定義了一個對象的 unscopable(不可限定)屬性。在 with 語句中,不能從 Sandbox 對象中檢索 Unscopable 屬性,而是直接從閉包或全局作用域檢索屬性。

所以我們需要對 Symbol.unscopables 這種情況做一次加固,

function compileCode(code) { code = ’with (sandbox) {’ + code + ’}’; const fn = new Function(’sandbox’, code); return (sandbox) => { const proxy = new Proxy(sandbox, { has() { return true; }, get(target, key, receiver) { if (key === Symbol.unscopables) { return undefined; } Reflect.get(target, key, receiver); } }); return fn(proxy); } }

全局變量白名單

但是,這時沙箱里是執(zhí)行不了瀏覽器默認(rèn)為我們提供的各種工具類和函數(shù)的,它只能作為一個沒有任何副作用的純函數(shù),當(dāng)我們想要使用某些全局變量或類時,可以自定義一個白名單:

const ALLOW_LIST = [’console’]; function compileCode(code) { code = ’with (sandbox) {’ + code + ’}’; const fn = new Function(’sandbox’, code); return (sandbox) => { const proxy = new Proxy(sandbox, { has() { if (!ALLOW_LIST.includes(key)) { return true; } }, get(target, key, receiver) { if (key === Symbol.unscopables) { return undefined; } Reflect.get(target, key, receiver); } }); return fn(proxy); } }

最終代碼:

好了,總結(jié)上面的代碼,我們就完成了一個簡易的 JavaScript 模塊執(zhí)行器:

const ALLOW_LIST = [’console’]; export default class Module { exports = {} wrapper = [ ’return (function (exports, module) { ’, ’n});’ ]; wrap(script) { return `${this.wrapper[0]} ${script} ${this.wrapper[1]}`; }; runInContext(code) { code = `with (sandbox) { $[code] }`; const fn = new Function(’sandbox’, code); return (sandbox) => { const proxy = new Proxy(sandbox, { has(target, key) { if (!ALLOW_LIST.includes(key)) { return true; } }, get(target, key, receiver) { if (key === Symbol.unscopables) { return undefined; } Reflect.get(target, key, receiver); } }); return fn(proxy); } } compile(content) { const wrapper = this.wrap(content); const compiledWrapper = this.runInContext(wrapper)({}); compiledWrapper.call(this.exports, this.exports, this); } }

測試執(zhí)行效果:

function getModuleFromString(code) { const scanModule = new Module(); scanModule.compile(code); return scanModule.exports; } const module = getModuleFromString(` module.exports = { name : ’ConardLi’, action : function(){ console.log(this.name); } }; `); module.action(); // ConardLi

以上就是如何手動實現(xiàn)一個 JavaScript 模塊執(zhí)行器的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 模塊執(zhí)行器的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 国产在线一区二区三区 | 羞羞色影院 | 亚洲欧美另类在线观看 | 日韩视频精品在线 | 视频1区| 久久综合久 | 国产精品久久久久久久久久久久冷 | 91视频在线播放视频 | 91亚洲高清| 日本三级中国三级99人妇网站 | 国产二区三区 | 精品无人乱码一区二区三区的优势 | 欧美一区不卡 | 日韩在线观看成人 | 午夜草民福利电影 | avhd101在线成人播放 | 亚洲欧洲在线观看 | 91久久夜色精品国产网站 | 日韩高清一区 | 久久99精品久久久久久久青青日本 | av在线官网 | 欧美一区二区三区精品免费 | 日韩一区二区在线观看 | 在线免费黄色小视频 | 欧洲视频一区二区 | 久久99久久99精品 | 精品无码久久久久久国产 | 国产高清视频一区二区 | 黄色小视频在线免费观看 | 久久这里只有精品首页 | 国产一区二区视频免费看 | 久久九 | 天天操网 | 夜夜夜夜夜操 | 999国内精品永久免费视频 | 五月婷婷导航 | 少妇一级淫免费放 | 久久中文字幕一区 | 天天碰天天操 | 久久久久久久久国产 | 国产www精品| 日韩精品视频免费在线观看 | 日韩喷潮 | 伊人网在线视频 | 免费中文字幕 | 九色 在线| 日韩欧美国产电影 | 亚洲综合区| 日韩在线观看网站 | 久久久网 | 日韩美女av在线 | 国产精品视屏 | 欧美一区二区三区精品 | 久久精品国产精品青草 | 在线观看免费成人av | 伊人网影院 | 人人草天天草 | 成视频年人免费看黄网站 | 久久成人精品一区二区三区 | www.44181com| 天天艹逼 | 91成人免费在线观看 | 国产一区二区三区在线免费观看 | 成人a在线视频免费观看 | 欧美8一10sex性hd | 成人精品免费视频 | 日韩成人在线播放 | www操com| 一级视频毛片 | 久久精彩视频 | 欧美日韩在线一区二区 | 精品国产不卡一区二区三区 | 日韩电影一区二区三区 | 日本久久久久久久久久久久 | 6080亚洲精品一区二区 | a∨在线观看| 激情毛片 | 亚洲精品三级 | 欧美在线观看网站 | 久久综合九色综合欧美狠狠 | 久久精品亚洲欧美日韩精品中文字幕 | 日韩av在线一区二区三区 | 国产亚洲一区二区三区 | 亚洲一区视频在线 | 欧美性猛片aaaaaaa做受 | 国产精品一区二区在线 | 中文字幕日韩一区 | 久久久精品高清 | 欧美性猛交xxxx黑人猛交 | 黄色片免费在线 | 亚洲乱码国产乱码精品精的特点 | 成年免费a级毛片 | 欧美淫视频 | 91精品国产色综合久久不卡98 | 亚洲久久在线 | 国产情侣自拍啪啪 | 97国产精品久久久 | 最近免费中文字幕在线视频2 | 在线成人av | 亚洲精品福利视频 | 天天干天天操 | 国产精品一区二区三区久久 | 亚洲欧洲中文日韩 | 九九热这里只有精品8 | 久久a国产 | 欧美性吧| 天堂资源在线 | 免费看国产片在线观看 | 国产日韩欧美精品一区二区 | 国产精品人人做人人爽人人添 | 国产一区二区久久 | 男女黄网站 | 中文字幕视频免费观看 | 精品人成| 欧美精品区 | 日本天天操 | 九九热这里只有精品8 | 色视频网站在线观看 | 精品久久久久久久久久 | www.毛片| 日韩欧美一区在线 | 在线不卡a资源高清 | 日韩视频中文字幕 | 99亚洲精品 | 久久草在线视频 | 亚洲第一视频网站 | 国产亚洲精品久 | 国产精品一区二区三区四区 | 免费一区| 日韩成人在线电影 | 欧美日韩一区二区三区 | 老司机福利在线观看 | 久久久久久久久久影院 | 欧美日韩国产一区二区三区 | 一级一级国产片 | 国产男女做爰免费网站 | 久久人人爽爽爽人久久久 | 日韩一区二区三区在线观看 | 精品视频在线播放 | 99国产精品99久久久久久 | 日韩欧美国产精品 | 吴梦梦到粉丝家实战华中在线观看 | 一级日批片 | 激情视频在线观看免费 | 久久福利电影 | 视频一区中文字幕 | 99久久婷婷国产精品综合 | 欧美九九九 | 色综合色综合网色综合 | 一级毛片视屏 | 午夜精品一区二区三区在线视频 | 荷兰欧美一级毛片 | 国产激情在线观看视频 | 国产精品久久久久久久7电影 | www.中文字幕在线 | 国产欧美精品一区二区色综合 | 久久99这里只有精品 | 久久伊人一区二区 | 久久久91精品国产一区二区三区 | 97国产一区二区精品久久呦 | 国产精品久久久久久久久免费桃花 | 欧美成人精品一区二区男人看 | 久久精品91 | aaa级片| 日韩精品一区二区三区在线观看 | 亚洲精品www久久久久久 | 九九re| 亚洲成年| 91精品国产美女在线观看 | 日韩一区二区三区在线播放 | 亚洲蜜臀av乱码久久精品蜜桃 | 亚洲精品自在在线观看 | 91亚洲国产成人久久精品网站 | 91免费在线视频 | 国产精品二区一区 | 26uuu成人免费毛片 | 婷婷亚洲五月 | 欧美成人精品激情在线观看 | 国产乱淫av片 | 日本欧美国产 | 久久一 | 亚洲精品一区在线观看 | 国产精品国产自产拍高清 | 国产在线专区 | 色噜噜视频在线观看 | 在线中文 | 日日夜夜精品网站 | 日韩精品一区二区三区在线观看 | 国产精品18久久久久久久久 | 亚洲黄色片免费 | 国产精品伦理一区 | 国产aaa大片 | 色网在线看 | 久久综合久久综合久久 | 日韩精品视频免费在线观看 | 国产欧美日本 | 欧美日韩激情四射 | 日韩一区二区在线观看 | av官网在线| 福利二区 | 国产精品一区二区av | 午夜剧| 久久国产一区二区三区 | 精品久久不卡 | 午夜国产羞羞视频免费网站 | 日韩精品视频网 | www.国产| 亚洲一区二区在线 | 欧美a级成人淫片免费看 | 国产精品亚洲视频 | 91精品国产日韩91久久久久久 | 国内精品视频 | 亚洲一区二区三区在线播放 | 日韩欧美三级 | 91久久精品国产91久久 | 福利久久 | 三级在线免费 | 亚洲国产精品成人 | 国产精品久久久久久一区二区三区 | 成人高清网站 | 国产精品久久久久久久久久东京 | 91精品国产综合久久久久久 | 97色免费视频 | 国产亚州av | 精品视频在线免费观看 | 中文精品在线 | 久久99精品久久久久久琪琪 | 亚洲精选久久 | 中文字幕 国产精品 | 在线观看国产精品一区 | 国产精品日本欧美一区二区三区 | 日韩99| 激情网页 | 夜夜操av | 日韩在线播放一区 | 久久精品一二三四 | 日韩成人精品视频在线观看 | 91丨九色丨国产在线 | 国产综合精品一区二区三区 | 青草青草久热精品视频在线观看 | 欧美精品成人 | 日韩欧美中文 | 91婷婷射 | 久久久蜜桃 | 国产丝袜一区 | 亚洲一区欧美一区 | av一区二区在线观看 | 欧美一级一区 | 国产精品.xx视频.xxtv | 久久久久久1 | 亚洲美女在线视频 | 欧美一区二区在线播放 | 伊人网视频在线 | 久久色视频| 不卡一区 | 在线无码 | 久久久婷| 色婷婷亚洲一区二区三区 | 在线观看www| 午夜视频在线 | av色资源| 久久精品国产亚洲一区二区三区 | 久久久亚洲一区 | 97国产精品视频 | 午夜午夜精品一区二区三区文 | 欧美综合成人网 | 国产午夜久久 | 亚洲一区久久久 | 国产精品精品 | 亚洲福利 | 国产日产精品一区二区三区四区 | 涩涩天堂 | 亚洲成人三区 | 精品亚洲视频在线观看 | 午夜小视频在线观看 | 欧洲亚洲精品久久久久 | 伊人二区 | 精品视频久久 | 欧美精品免费在线 | 一区二区电影 | xvideos.蜜桃一区二区 | 久久久久久免费看 | 中文在线一区二区 | 日韩欧美在线观看视频 | 免费看片一区二区三区 | 色视频www在线播放国产人成 | 四虎免看黄 | 国产福利视频在线观看 | 95香蕉视频 | 日韩一区在线视频 | 香蕉三级| 国户精品久久久久久久久久久不卡 | 精品一区二区三区三区 | 欧美精品亚洲 | 久久久精品网站 | 国产成人在线播放 | 亚洲精品99 | 一级毛片免费视频 | 亚州中文字幕 | 中文在线一区二区 | a中文在线视频 | 精品国产一级毛片 | 日本在线一区二区 | 中文字幕免费在线观看视频 | 国产精品久久久久久久岛一牛影视 | av天空 | 欧美在线播放一区 | 欧美综合婷婷 | 一本大道久久a久久精二百 亚洲欧美高清 | 成人免费淫片aa视频免费 | 午夜爱爱毛片xxxx视频免费看 | 免费一级毛片 | 亚洲高清一区二区三区 | 日韩视频在线观看 | 在线欧美日韩 | av中文字幕在线播放 | 国产欧美日本 | 黄色网亚洲| 国产精品久久久久久久久久久新郎 | 九色一区| 亚洲综合色自拍一区 | 一级片免费视频 | 亚洲精品国产综合区久久久久久久 | 成人在线播放网站 | 成人在线小视频 | 一区二区三区在线播放 | 在线播放国产精品 | 夜夜av | 欧美激情a∨在线视频播放 中文字幕网在线 | 91精品国产91综合久久蜜臀 | a免费观看 | 国产精品久久久久久久久久久杏吧 | 欧美成人一区二区三区片免费 | 后人极品翘臀美女在线播放 | 一区二区三区高清不卡 | 国产真实精品久久二三区 | 日韩欧美中文在线 | 国产福利一区二区 | 亚洲精品大片 | 久久91精品| 久久精品国产亚卅av嘿嘿 | 精品久久久久久 | 新99热| 一区二区在线看 | 欧美日韩久久 | 亚洲一区二区在线 | 国产一级免费视频 | 成人免费在线播放 | 精品欧美乱码久久久久久1区2区 | 久久久国产视频 | av一区二区三区 | 精品九九 | 99爱在线观看 | 欧美成人中文字幕 | 亚洲一区精品在线 | 91 视频网站 | 羞羞视频在线播放 | 天天干天天搞天天射 | 亚洲视频一区在线 | 国产大胆自拍 | 在线观看你懂的网站 | 日韩在线精品视频 | 操到爽 | 欧美中文字幕一区二区 | 中文字幕在线观看 | 亚洲一区二区三区免费视频 | 免费日韩成人 | 欧美视频一级片 | 高清国产一区二区三区四区五区 | 精品国产91亚洲一区二区三区www | 国产亚洲精品久 | 天天操天天碰 | 亚洲国产福利一区 | 国变精品美女久久久久av爽 | 久久精品国产精品 | 不卡一区二区三区四区 | 青青草精品 | www.色综合| 九九色九九 | 日本一区二区三区免费观看 | 97久久精品 | 色xx综合网| 午夜精品久久久久久久星辰影院 | 免费在线观看一区二区 | 亚洲国产区 | 久草在线 | 精品亚洲一区二区三区 | 91精品久久久久久久久中文字幕 | 国产视频精品在线 | 亚洲精品日韩综合观看成人91 | 亚洲电影一区二区三区 | av中文字幕在线播放 | 欧美理论片在线 | 三级视频在线 | 国产精品久久久久国产精品 | 97男人的天堂| 久久亚洲国产精品 | 一级a毛片免费 | 亚洲第一页中文字幕 | 91久久国产 | 国产精品高潮呻吟av久久4虎 | 羞羞av在线| 自拍偷拍欧美 | 人人草人人干 | 91麻豆精品国产91久久久资源速度 | 日本精品在线播放 | 欧美国产免费 | 中文字幕在线观看第一页 | av免费在线观看网站 | 欧美综合一区二区 | 日韩欧美一区二区三区久久婷婷 | 国产综合精品一区二区三区 | 亚洲精品一区二区三区 | 国产精品人人做人人爽人人添 | 日韩在线精品 | 麻豆国产露脸在线观看 | 久久首页 | 黑人巨大精品欧美一区免费视频 | 成人免费视频网 | 成人在线观看一区 | jlzzjlzz亚洲日本少妇 | 欧美一区二区免费在线 | 精品视频99 | www.99re | 综合久久综合久久 | 一区二区在线视频 | 中文字幕亚洲一区二区三区 | 国产猛男猛女超爽免费视频网站 | 日本理伦片午夜理伦片 | 亚洲一区二区免费在线观看 | 人人看人人干 | 国产www| 欧美 日韩 国产 一区 | 亚洲一区二区三区在线 | 欧美成年人视频 | 伊人久久一区二区三区 | 成人在线播放 | 亚洲无吗电影 | 在线观看亚洲一区 | 国产视频久久久久久 | 国产精品久久久久久 | 日本在线免费 | av中文在线 | 天天久久| 不卡视频一区 | 日本狠狠色| 久久久久久久久成人 | av手机在线电影 | 亚洲精品视频在线看 | 成人在线一区二区三区 | 国产免费久久 | 蜜桃一区二区三区 | 精品国产欧美一区二区三区成人 | 亚洲欧美在线一区二区 | 国产午夜久久 | 50人群体交乱视频 | 日韩精品一区二区在线观看 | 国产精品久久久久久久久大全 | 欧美综合一区二区三区 | 成人精品一区二区三区 | 亚洲最大的黄色网 | 精品中文在线 | 在线视频二区 | 99草免费视频 | 一二三四在线视频观看社区 | 亚洲综合一区二区三区 | 二区在线观看 | 成人美女免费网站视频 | 99久久国产综合精品女不卡 | 亚洲视频 欧美视频 | 日韩电影一区二区三区 | 九九热精品视频在线观看 | 亚洲精品在线看 | 在线观看国产视频 | 久久人人爽人人爽人人片av软件 | 精品99久久久久久 | 精品视频在线观看一区二区 | 中文天堂av | 午夜色视频在线观看 | 一区二区三区在线免费播放 | 成人在线h | 久久精选视频 | 国产精品久久久久久久午夜 | 午夜精品久久久久久久星辰影院 | 亚洲一区二区三区 | 宅男lu666噜噜噜在线观看 | 免费一区二区 | 国产视频福利在线观看 | 亚洲精品视频在线免费 | 亚洲精品一区久久久久久 | 91在线免费看| 91麻豆精品国产91久久久资源速度 | 国产精品福利91 | 精品2区| 国产精品日本一区二区在线播放 | 久久久久综合 | 国产美女www爽爽爽免费视频 | 最新日韩av | 一级在线免费视频 | 波多野结衣先锋影音 | 日韩不卡一二三 | 欧洲成人午夜免费大片 | 日韩精品中文字幕在线观看 | 国产日韩精品一区二区在线观看播放 | 亚洲精品一区在线观看 | 欧美综合区| 亚洲www视频 | 天天操天天曰 | 亚洲精品中文字幕乱码无线 | 亚洲tv久久爽久久爽 | 日韩精品专区在线影院重磅 | 一级毛片免费看 | 国产精品日韩欧美一区二区三区 | 国产18av | 亚洲精品在线国产 | 国产精品久久久久久久久久免费看 | 亚洲精品视频在线观看免费 | 天天天天天天天天操 | 97在线视频免费 | 国产一在线 | 亚洲高清视频在线观看 | 黄色大片网站 | 午夜免费影院 | 日韩综合一区 | 国精日本亚洲欧州国产中文久久 | 欧美天堂在线观看 | 欧美理论片在线观看 | 91精品国产乱码久久久久久久久 | 男女www视频 | 免费欧美 | 欧美xxxx性| 2020亚洲视频| 亚洲一区二区三区视频免费观看 | av一区在线 | 亚洲国产情侣自拍 | 一级黄视频 | 亚洲欧美一区二区在线观看 | 欧美一级做性受免费大片免费 | 在线播放亚洲 | 久久久精品久久久 | 色综合久久天天综合网 | 一级毛片在线看aaaa | 一级欧美在线 | 日日日操 | 国产精品久久精品 | 成年人精品视频在线观看 | 精品国产乱码久久久久久闺蜜 | 国产伦精品一区二区三区四区视频 | 国产欧美综合一区二区三区 | 欧美78videosex性欧美 | 欧美一区在线看 | 午夜精品久久久久久久久久久久 | 高清精品一区二区 | 91欧美在线 | 日本精品在线观看 | 四虎视频 | 亚洲日本欧美 | 天天天天天天天天干 | 一区二区在线免费观看 | 黄a在线看 | 国产精品一区二区三区免费 | 黄色欧美一级片 | julia中文字幕久久一区二区 | 久久久精品一区 | 三级色黄 | 日韩在线视频网站 | 亚洲一区二区三区高清 | 天堂中文资源在线 | 欧美高清成人 | 国产精品久久久久久亚洲调教 | 色婷婷综合久久久久中文一区二区 | 综合网日韩 | 国产精品91av | 精品国产乱码久久久久久闺蜜 | 男女小网站 | 精品av| 成人网址在线观看 | av在线网址观看 | 玖玖精品| av在线免费观看网站 | 亚洲一区二区三 | 精品久久久久久久久久久久久久 | 亚洲精选国产 | 91精品国产综合久久婷婷香蕉 | 午夜免费 | 欧美精产国品一二三区 | 久久久久久免费精品 | 欧美性猛交一区二区三区精品 | 国产精品国产成人国产三级 | 特级毛片在线大全免费播放 | 成人免费淫片aa视频免费 | 国产黄色网址在线观看 | 一区二区视频在线 | 国产一区国产二区在线观看 | 97伦理在线 | 国产一区二区亚洲 | 亚洲视频免费在线观看 | 成人国产 | 成人v片 | 日韩免费在线视频 | 欧美多人在线 | 日韩久久一区二区 | 日日干天天操 | 国产成人免费在线 | 人人草人人 | 日韩中文字幕 | 亚洲精品久久久久avwww潮水 | 天天拍天天干天天操 | 欧美精品被 | 国产精选一区二区三区 | 黄色片一区 | 欧美日韩国产一区二区三区不卡 | 午夜爽| 亚洲系列| 日韩精品在线一区 |