成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

一文講解JS中Object對象一些操作方法(分享)

之前的文章《深入解析JavaScript中對象拷貝方法(附代碼)》中,給大家了解了JS中對象拷貝方法。下面本篇文章給大家了解一下JS中Object對象一些操作方法,伙伴們來看看一下。

一文講解JS中Object對象一些操作方法(分享)

javascriptObject一些高效的操作方法

Object.assign()

方法用于將所有可枚舉屬性的值從一個或多個源對象復制到目標對象。它將返回目標對象。

const object1 = { a: 1, b: 2, c: 3 }; const object2 = Object.assign({ c: 4, d: 5 }, object1); console.log(object2); // {  a: 1,  b: 2,  c: 3 ,c: 4, d: 5 }

Object.create()

方法創建一個新對象,使用現有的對象來提供新創建的對象的proto

const person = {   color: "red",   sayName: function () {     console.log(this.name);   }, };  const m = Object.create(person); m.name = "chuchur"; m.sayName(); // chuchur

Object.defineProperties()

方法直接在一個對象上定義新的屬性或修改現有屬性,并返回該對象。

var obj = {}; Object.defineProperties(obj, {   property1: {     value: 1,     writable: true,   },   property2: {     value: "Hello",     writable: false,   }, });  obj.property1 = 1; obj.property2 = 2;  console.log(obj); // {property1: 1, property2: "Hello"}

Object.defineProperty()

方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現有屬性,并返回這個對象。

var o = {}; // 創建一個新對象  // 在對象中添加一個屬性與數據描述符的示例 Object.defineProperty(o, "a", {   value: 37,   writable: true,   enumerable: true,   configurable: true, });  // 對象o擁有了屬性a,值為37  // 在對象中添加一個屬性與存取描述符的示例 var bValue; Object.defineProperty(o, "b", {   get: function () {     return bValue;   },   set: function (newValue) {     bValue = newValue;   },   enumerable: true,   configurable: true, });  o.b = 38; // 對象o擁有了屬性b,值為38  // o.b的值現在總是與bValue相同,除非重新定義o.b

Object.entries()

方法返回一個給定對象自身可枚舉屬性的鍵值對數組,其排列與使用for...in循環遍歷該對象時返回的順序一致(區別在于for-in循環也枚舉原型鏈中的屬性)。

const obj = { foo: "bar", baz: 42 }; console.log(Object.entries(obj)); //[['foo','bar'],['baz',42]]

Object.keys()

方法會返回一個由一個給定對象的自身可枚舉屬性組成的數組,數組中屬性名的排列順序和使用for...in循環遍歷該對象時返回的順序一致 。

// simple array var arr = ["a", "b", "c"]; console.log(Object.keys(arr)); // console: ['0', '1', '2']  // array like object var obj = { 0: "a", 1: "b", 2: "c" }; console.log(Object.keys(obj)); // console: ['0', '1', '2']  // array like object with random key ordering var anObj = { 100: "a", 2: "b", 7: "c" }; console.log(Object.keys(anObj)); // console: ['2', '7', '100']  // getFoo is a property which isn't enumerable var myObj = Object.create(   {},   {     getFoo: {       value: function () {         return this.foo;       },     },   } ); myObj.foo = 1; console.log(Object.keys(myObj)); // console: ['foo']

Object.values()

方法返回一個給定對象自己的所有可枚舉屬性值的數組,值的順序與使用for...in循環的順序相同(區別在于for-in循環枚舉原型鏈中的屬性 )。

var obj = { foo: "bar", baz: 42 }; console.log(Object.values(obj)); // ['bar', 42]  // array like object var obj = { 0: "a", 1: "b", 2: "c" }; console.log(Object.values(obj)); // ['a', 'b', 'c']  // array like object with random key ordering // when we use numeric keys, the value returned in a numerical order according to the keys var an_obj = { 100: "a", 2: "b", 7: "c" }; console.log(Object.values(an_obj)); // ['b', 'c', 'a']  // getFoo is property which isn't enumerable var my_obj = Object.create(   {},   {     getFoo: {       value: function () {         return this.foo;       },     },   } ); my_obj.foo = "bar"; console.log(Object.values(my_obj)); // ['bar']  // non-object argument will be coerced to an object console.log(Object.values("foo")); // ['f', 'o', 'o'] ==Array.from('foo')  //ES5 if (!Object.values)   Object.values = function (obj) {     if (obj !== Object(obj))       throw new TypeError("Object.values called on a non-object");     var val = [],       key;     for (key in obj) {       if (Object.prototype.hasOwnProperty.call(obj, key)) {         val.push(obj[key]);       }     }     return val;   };

Object.hasOwnProperty()

方法會返回一個布爾值,指示對象自身屬性中是否具有指定的屬性。

o = new Object(); o.prop = "exists";  function changeO() {   o.newprop = o.prop;   delete o.prop; }  o.hasOwnProperty("prop"); // 返回 true changeO(); o.hasOwnProperty("prop"); // 返回 false o.hasOwnProperty("toString"); // 返回 false o.hasOwnProperty("hasOwnProperty"); // 返回 false

Object.getOwnPropertyDescriptor()

方法返回指定對象上一個自有屬性對應的屬性描述符。(自有屬性指的是直接賦予該對象的屬性,不需要從原型鏈上進行查找的屬性)

o = { bar: 42 }; d = Object.getOwnPropertyDescriptor(o, "bar"); // d { //   configurable: true, //   enumerable: true, //   value: 42, //   writable: true // }

Object.getOwnPropertyDescriptors()

方法用來獲取一個對象的所有自身屬性的描述符。

Object.assign()方法只能拷貝源對象的可枚舉的自身屬性,同時拷貝時無法拷貝屬性的特性們,而且訪問器屬性會被轉換成數據屬性,也無法拷貝源對象的原型,該方法配合Object.create() 方法可以實現上面說的這些。

Object.create(   Object.getPrototypeOf(obj),   Object.getOwnPropertyDescriptors(obj) );

Object.getOwnPropertyNames()

方法返回一個由指定對象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數組。

var arr = ["a", "b", "c"]; console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]  // 類數組對象 var obj = { 0: "a", 1: "b", 2: "c" }; console.log(Object.getOwnPropertyNames(obj).sort()); // ["0", "1", "2"]  // 使用Array.forEach輸出屬性名和屬性值 Object.getOwnPropertyNames(obj).forEach(function (val, idx, array) {   console.log(val + " -> " + obj[val]); }); // 輸出 // 0 -> a // 1 -> b // 2 -> c  //不可枚舉屬性 var my_obj = Object.create(   {},   {     getFoo: {       value: function () {         return this.foo;       },       enumerable: false,     },   } ); my_obj.foo = 1;  console.log(Object.getOwnPropertyNames(my_obj).sort()); // ["foo", "getFoo"]

Object.getOwnPropertySymbols()

方法返回一個給定對象自身的所有Symbol屬性的數組。

var obj = {}; var a = Symbol("a"); var b = Symbol.for("b");  obj[a] = "localSymbol"; obj[b] = "globalSymbol";  var objectSymbols = Object.getOwnPropertySymbols(obj);  console.log(objectSymbols.length); // 2 console.log(objectSymbols); // [Symbol(a), Symbol(b)] console.log(objectSymbols[0]); // Symbol(a)

Object.isPrototypeOf()

方法用于測試一個對象是否存在于另一個對象的原型鏈上。

function Foo() {} function Bar() {} function Baz() {}  Bar.prototype = Object.create(Foo.prototype); Baz.prototype = Object.create(Bar.prototype);  var baz = new Baz();  console.log(Baz.prototype.isPrototypeOf(baz)); // true console.log(Bar.prototype.isPrototypeOf(baz)); // true console.log(Foo.prototype.isPrototypeOf(baz)); // true console.log(Object.prototype.isPrototypeOf(baz)); // true

Object.propertyIsEnumerable()

方法返回一個布爾值,表示指定的屬性是否可枚舉。

var o = {}; var a = []; o.prop = "is enumerable"; a[0] = "is enumerable";  o.propertyIsEnumerable("prop"); //  返回 true a.propertyIsEnumerable(0); // 返回 true  //用戶自定義對象和引擎內置對象 var a = ["is enumerable"];  a.propertyIsEnumerable(0); // 返回 true a.propertyIsEnumerable("length"); // 返回 false  Math.propertyIsEnumerable("random"); // 返回 false this.propertyIsEnumerable("Math"); // 返回 false  //自身屬性和繼承屬性 var a = []; a.propertyIsEnumerable("constructor"); // 返回 false  function firstConstructor() {   this.property = "is not enumerable"; }  firstConstructor.prototype.firstMethod = function () {};  function secondConstructor() {   this.method = function method() {     return "is enumerable";   }; }  secondConstructor.prototype = new firstConstructor(); secondConstructor.prototype.constructor = secondConstructor;  var o = new secondConstructor(); o.arbitraryProperty = "is enumerable";  o.propertyIsEnumerable("arbitraryProperty"); // 返回 true o.propertyIsEnumerable("method"); // 返回 true o.propertyIsEnumerable("property"); // 返回 false  o.property = "is enumerable";  o.propertyIsEnumerable("property"); // 返回 true  // 這些返回fasle,是因為,在原型鏈上propertyIsEnumerable不被考慮 // (盡管最后兩個在for-in循環中可以被循環出來)。 o.propertyIsEnumerable("prototype"); // 返回 false (根據 JS 1.8.1/FF3.6) o.propertyIsEnumerable("constructor"); // 返回 false o.propertyIsEnumerable("firstMethod"); // 返回 false

Object.getPrototypeOf()

方法返回指定對象的原型(內部[[Prototype]])屬性的

const prototype1 = {}; const object1 = Object.create(prototype1);  console.log(Object.getPrototypeOf(object1) === prototype1); // expected output: true

Object.is()

方法判斷兩個值是否是相同的值。

Object.is("foo", "foo"); // true Object.is(window, window); // true  Object.is("foo", "bar"); // false Object.is([], []); // false  var test = { a: 1 }; Object.is(test, test); // true  Object.is(null, null); // true  // 特例 Object.is(0, -0); // false Object.is(-0, -0); // true Object.is(NaN, 0 / 0); // true  // ES5 if (!Object.is) {   Object.is = function (x, y) {     // SameValue algorithm     if (x === y) {       // Steps 1-5, 7-10       // Steps 6.b-6.e: +0 != -0       return x !== 0 || 1 / x === 1 / y;     } else {       // Step 6.a: NaN == NaN       return x !== x && y !== y;     }   }; }

Object.preventExtensions()

方法讓一個對象變的不可擴展,也就是永遠不能再添加新的屬性。

// Object.preventExtensions將原對象變的不可擴展,并且返回原對象. var obj = {}; var obj2 = Object.preventExtensions(obj); obj === obj2; // true  // 字面量方式定義的對象默認是可擴展的. var empty = {}; Object.isExtensible(empty); //=== true  // ...但可以改變. Object.preventExtensions(empty); Object.isExtensible(empty); //=== false  // 使用Object.defineProperty方法為一個不可擴展的對象添加新屬性會拋出異常. var nonExtensible = { removable: true }; Object.preventExtensions(nonExtensible); Object.defineProperty(nonExtensible, "new", { value: 8675309 }); // 拋出TypeError異常  // 在嚴格模式中,為一個不可擴展對象的新屬性賦值會拋出TypeError異常. function fail() {   "use strict";   nonExtensible.newProperty = "FAIL"; // throws a TypeError } fail();  // 一個不可擴展對象的原型是不可更改的,__proto__是個非標準魔法屬性,可以更改一個對象的原型. var fixed = Object.preventExtensions({}); fixed.__proto__ = { oh: "hai" }; // 拋出TypeError異常

Object.isExtensible()

方法判斷一個對象是否是可擴展的(是否可以在它上面添加新的屬性)。

// 新對象默認是可擴展的. var empty = {}; Object.isExtensible(empty); // === true  // ...可以變的不可擴展. Object.preventExtensions(empty); Object.isExtensible(empty); // === false  // 密封對象是不可擴展的. var sealed = Object.seal({}); Object.isExtensible(sealed); // === false  // 凍結對象也是不可擴展. var frozen = Object.freeze({}); Object.isExtensible(frozen); // === false

Object.freeze()

方法可以凍結一個對象,凍結指的是不能向這個對象添加新的屬性,不能修改其已有屬性的值,不能刪除已有屬性,以及不能修改該對象已有屬性的可枚舉性、可配置性、可寫性。該方法返回被凍結的對象。

const object1 = {   property1: 42, };  const object2 = Object.freeze(object1);  object2.property1 = 33; // 嚴格模式會報錯,非嚴格模式不報錯,但是不執行  console.log(object2.property1); // 輸出: 42

Object.isFrozen()

方法判斷一個對象是否被凍結。

// 使用Object.freeze是凍結一個對象最方便的方法. var frozen = { 1: 81 }; Object.isFrozen(frozen); //=== false Object.freeze(frozen); Object.isFrozen(frozen); //=== true  // 一個凍結對象也是一個密封對象. Object.isSealed(frozen); //=== true  // 當然,更是一個不可擴展的對象. Object.isExtensible(frozen); //=== false  // 一個對象默認是可擴展的,所以它也是非凍結的. Object.isFrozen({}); // === false  // 一個不可擴展的空對象同時也是一個凍結對象. var vacuouslyFrozen = Object.preventExtensions({}); Object.isFrozen(vacuouslyFrozen); //=== true;  // 一個非空對象默認也是非凍結的. var oneProp = { p: 42 }; Object.isFrozen(oneProp); //=== false  // 讓這個對象變的不可擴展,并不意味著這個對象變成了凍結對象, // 因為p屬性仍然是可以配置的(而且可寫的). Object.preventExtensions(oneProp); Object.isFrozen(oneProp); //=== false  // ...如果刪除了這個屬性,則它會成為一個凍結對象. delete oneProp.p; Object.isFrozen(oneProp); //=== true  // 一個不可擴展的對象,擁有一個不可寫但可配置的屬性,則它仍然是非凍結的. var nonWritable = { e: "plep" }; Object.preventExtensions(nonWritable); Object.defineProperty(nonWritable, "e", { writable: false }); // 變得不可寫 Object.isFrozen(nonWritable); //=== false  // 把這個屬性改為不可配置,會讓這個對象成為凍結對象. Object.defineProperty(nonWritable, "e", { configurable: false }); // 變得不可配置 Object.isFrozen(nonWritable); //=== true  // 一個不可擴展的對象,擁有一個不可配置但可寫的屬性,則它仍然是非凍結的. var nonConfigurable = { release: "the kraken!" }; Object.preventExtensions(nonConfigurable); Object.defineProperty(nonConfigurable, "release", { configurable: false }); Object.isFrozen(nonConfigurable); //=== false  // 把這個屬性改為不可寫,會讓這個對象成為凍結對象. Object.defineProperty(nonConfigurable, "release", { writable: false }); Object.isFrozen(nonConfigurable); //=== true  // 一個不可擴展的對象,值擁有一個訪問器屬性,則它仍然是非凍結的. var accessor = {   get food() {     return "yum";   }, }; Object.preventExtensions(accessor); Object.isFrozen(accessor); //=== false  // ...但把這個屬性改為不可配置,會讓這個對象成為凍結對象. Object.defineProperty(accessor, "food", { configurable: false }); Object.isFrozen(accessor); //=== true

Object.seal()

方法封閉一個對象,阻止添加新屬性并將所有現有屬性標記為不可配置。當前屬性的值只要可寫就可以改變。

const object1 = {   property1: 42, };  Object.seal(object1); object1.property1 = 33; console.log(object1.property1); // expected output: 33  delete object1.property1; // cannot delete when sealed console.log(object1.property1); // expected output: 33

Object.isSealed()

方法判斷一個對象是否被密封。

// 新建的對象默認不是密封的. var empty = {}; Object.isSealed(empty); // === false  // 如果你把一個空對象變的不可擴展,則它同時也會變成個密封對象. Object.preventExtensions(empty); Object.isSealed(empty); // === true  // 但如果這個對象不是空對象,則它不會變成密封對象,因為密封對象的所有自身屬性必須是不可配置的. var hasProp = { fee: "fie foe fum" }; Object.preventExtensions(hasProp); Object.isSealed(hasProp); // === false  // 如果把這個屬性變的不可配置,則這個對象也就成了密封對象. Object.defineProperty(hasProp, "fee", { configurable: false }); Object.isSealed(hasProp); // === true  // 最簡單的方法來生成一個密封對象,當然是使用Object.seal. var sealed = {}; Object.seal(sealed); Object.isSealed(sealed); // === true  // 一個密封對象同時也是不可擴展的. Object.isExtensible(sealed); // === false  // 一個密封對象也可以是一個凍結對象,但不是必須的. Object.isFrozen(sealed); // === true ,所有的屬性都是不可寫的 var s2 = Object.seal({ p: 3 }); Object.isFrozen(s2); // === false, 屬性"p"可寫  var s3 = Object.seal({   get p() {     return 0;   }, }); Object.isFrozen(s3); // === true ,訪問器屬性不考慮可寫不可寫,只考慮是否可配置

Object.valueOf()

方法返回指定對象的原始值。

// Array:返回數組對象本身 var array = ["ABC", true, 12, -5]; console.log(array.valueOf() === array); // true  // Date:當前時間距1970年1月1日午夜的毫秒數 var date = new Date(2013, 7, 18, 23, 11, 59, 230); console.log(date.valueOf()); // 1376838719230  // Number:返回數字值 var num = 15.2654; console.log(num.valueOf()); // 15.2654  // 布爾:返回布爾值true或false var bool = true; console.log(bool.valueOf() === bool); // true  // new一個Boolean對象 var newBool = new Boolean(true); // valueOf()返回的是true,兩者的值相等 console.log(newBool.valueOf() == newBool); // true // 但是不全等,兩者類型不相等,前者是boolean類型,后者是object類型 console.log(newBool.valueOf() === newBool); // false  // Function:返回函數本身 function foo() {} console.log(foo.valueOf() === foo); // true var foo2 = new Function("x", "y", "return x + y;"); console.log(foo2.valueOf()); /* ? anonymous(x,y ) { return x + y; } */  // Object:返回對象本身 var obj = { name: "張三", age: 18 }; console.log(obj.valueOf() === obj); // true  // String:返回字符串值 var str = "http://www.xyz.com"; console.log(str.valueOf() === str); // true  // new一個字符串對象 var str2 = new String("http://www.xyz.com"); // 兩者的值相等,但不全等,因為類型不同,前者為string類型,后者為object類型 console.log(str2.valueOf() === str2); // false

推薦學習:JavaScript視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
欧美成人一区二区三区| 成人影院永久免费观看网址| 伊人久久久AV老熟妇色| 亚洲无线码高清在线观看| 一本久道中文无码字幕AV| 中文字幕AV无码人妻| AV免费啪啪永久| 饱满的乳被揉捏玩弄| 丰满的女房东6剧情| 国产精品美女乱子伦高| 精品高潮呻吟AV久久无码| 久碰人妻人妻人妻人妻人掠| 欧美亚洲国产片在线播放| 色悠久久久久综合网伊| 小东西好几天没弄了还能吃吗| 亚洲AV永久无码精品一福利 | 精东传媒剧国产MV的特点| 久久亚洲SM情趣捆绑调教| 女人与牛ZOZO| 熟女CHACHACHA性少妇| 亚洲成在人线AV中文字幕喷水| 亚洲色精品AⅤ一区区三区| 97色偷偷色噜噜狠狠爱网站97| 成人污污污WWW网站免费| 国产做国产爱免费视频| 蜜臀AV在线播放一区二区三区| 日产无人区一线二线三线小 | 国产乱人伦精品免费| 久久精品国产99国产精2020| 欧美人禽猛交乱配视频网站| 无码国产伦一区二区三区视频| 亚洲色精品AⅤ一区区三区| 99久久无码一区人妻| 国产精华最好的产品有哪些| 久久久久久精品免费免费WEI| 欧美人与禽XOXO牲伦交| 无码人妻久久一区二区三区不卡| 亚洲一区二区三区乱码AⅤ蜜桃| Chinese辽宁人妻4p| 国产精品无码一二区免费| 黑人巨大精品欧美一区二区免费 | 久久精品国产亚洲AV麻豆软件| 欧美人禽猛交乱配视频网站| 午夜理论片福利在线观看| 用各种刑具调教吹潮的视频| 大香伊人久久精品一区二区| 精品人妻无码区二区三区密桃| 啪啪叉叉xx高清无码| 亚洲AV无码一区二区三区18| 97国产精华最好的产品在线| 国产精品偷伦视频免费观看了| 鲁鲁网亚洲站内射污| 视频一区二区三区在线| 又大又粗进出白浆直流视频在线| 国产97成人亚洲综合在线| 久久久精品中文字幕麻豆发布| 日韩人妻精品一区二区三区视频| 亚洲国产AⅤ精品一区二区30P| 锕锕锕锕锕锕好污网站大全| 国内精品一线二线三线黄| 欧美人与动性行为视频| 亚洲精品第一国产综合麻豆 | 日本久久久久久久久久加勒比| 亚洲女人天堂成人AV在线| 成人午夜性A级毛片免费| 久久亚洲精品成人无码| 无码人妻久久1区2区3区| A级毛片免费高清视频| 精品韩国亚洲AV无码不卡区| 日本乱偷互换人妻中文字幕| 亚洲制服丝袜中文字幕在线| 国产成人午夜无码电影在线观看| 免费的视频BGM大全软件下载| 小寡妇一夜要了六次| А天堂中文最新版在线官网| 久久精品国产亚洲AV日韩| 无码精品一区二区三区在线| www.丁香五月| 久久久久人妻一区精品性色AV| 无码精品人妻 中文字幕| SEERX性欧美老妇| 久久婷婷成人综合色综合| 性少妇FREESEXVIDEO| 拔萝卜电视剧高清免费观看全集 | 国产精品亚洲第一区焦香味| 人妻丰满AV中文久久不卡| 一本加勒比波多野结衣高清| 国产精品无码久久综合| 日本在线 | 中文| 92国产精品午夜福利| 久久国产精品亚洲艾草网| 午夜福制92视频| 成人免费无码A毛片| 免费又黄又爽又猛的毛片| 亚洲乱码在线卡一卡二卡新区 | AV天堂午夜精品一区二区三区| 精品高朝久久久久9999| 无码一区二区三区在线| 暗夜免费观看在线完整版| 免费黄色电影在线观看| 亚洲午夜成人精品无码色欲| 国产真实乱XXXⅩ| 无码99久热只有精品视频在线观| 菠萝菠萝蜜免费播放视频| 欧美 日韩 国产 成人 在线观看 | 无码AV免费精品一区二区三区| 扒开校花的粉嫩小泬| 欧美人妻精品一区二区三区| 中文字AV字幕在线观看| 久久精品国产亚洲色欲蜜壂AV| 亚洲AV无码乱码在线观看富二代 | 成人无码区免费AⅤ片丝瓜视频| 欧美丰满熟妇性XXXX| 2017亚洲А∨天堂| 久久婷婷人人澡人爽人人喊| 亚洲精品无码专区在线在线播放| 国产内射老熟女AAAA| 天堂影院一区二区三区四区| 被老头侵犯的人妻| 欧美极品少妇XXXX亚洲精品| 在火车和后妈妈谁在一起是什么书| 交换配乱吟粗大SNS840| 午夜精品久久久久久久99热| 国产A在亚洲线播放| 少洁白妇无删减全文阅读| 粉嫩被黑人两根粗大猛烈进出视频 | 毛豆日产精品卡2卡3卡4卡免费| 野花社区日本免费图片| 精品综合久久久久久888| 亚洲男人成人性天堂网站| 精品亚洲AV无码喷奶水A漫画| 亚洲S久久久久一区二区| 韩国的无码AV看免费大片在线| 亚洲AV无码一区二区二三区软件| 国内精品久久久久久中文字幕| 亚洲AV无码专区亚洲AV| 娇妻被黑人杂交呻吟| 亚洲人成人无码www在线观看| 黑人又大又粗又硬XXXXX| 亚洲精品无码专区久久| 久久久久精品少妇9999| 又大又粗的久久久精品少妇AV| 免费无码AV片在线观| AV无码中文一区二区三区四区| 人妻少妇久久精品电影| 成人亚洲色欲色一欲WWW| 色噜噜狠狠色综合久色AⅤ网黑| 国产AV无码专区亚汌A√| 无码精品一区二区三区视频色欲网| 国产精品美女久久久久久久| 亚洲AⅤ无码日韩AV无码网站| 极品少妇被黑人白浆直流| 亚洲最新无码成AV人| 男女狂进狂出动态图| 八戒成年私人影院| 少妇高潮抽搐无码久久AV | 无码国产69精品久久久久APP| 国产帅男男Gay在线观看| 亚洲成AV人综合在线观看| 久久久精品人妻久久影视| 97SE色综合一区二区二区| 日本强好片久久久久久AAA | 日韩免费无码人妻波多野 | 久久精品伊人一区二区三区| 制服 丝袜 亚洲 中文 综合| 欧美人与性囗牲恔配| 乖我们换个姿态再来一遍吧的小说| 性少妇FREESEXVIDEO| 久久人妻AV中文字幕| AAA级久久久精品无码片| 人人妻人人妻人人人人妻| 国产成人亚洲影院在线播放| 亚洲精品国产美女久久久99| 久久久久久九九99精品| 97人妻人人揉人人躁人人爽| 色噜噜狠狠一区二区三区| 国产无遮挡无码视频在线观看不卡 | 波多野结衣一二三区AV高清| 小寡妇高潮喷水了| 久久五月丁香中文字幕| 啊灬啊灬别停啊灬用力啊免费| 无码国产激情在线观看| 久久久久亚洲AV成人网人人软件 | 初小VIDEOS第一次摘花| 无套内射GIF舔B吃奶| 久久成人国产精品免费软件| A狠狠久久蜜臀婷色中文网| 天堂√最新版中文在线| 精品无码国产一区二区三区51安| 中文无码AV一区二区三区| 色噜噜国产精品视频一区二区| 交换配乱吟粗大SNS840| 99在线精品免费视频九九视| 乌克兰ZOOMKOOL| 久久久久蜜桃精品成人片公司| 草莓视频APP在线下载| 亚洲成AV人片在线观看不卡| 欧美老熟妇手机在线观看| 国产人妖视频一区二区| 中文字幕无码专区人妻制服|