简而言之粗暴地理解js原型链–js面向对象编程

By admin in be365体育投注 on 2018年10月23日

原型链理解起来有点绕了,网上资料啊是不少,每次晚上睡觉不着的时到底好在网上找点原型链和闭包的文章看,效果太好。

率先谈谈最近的房价。这点儿龙系的数据说,北京房价较上年比较,平均下降了一万。还有介绍说,到9月之,一二、三线城市今年房价下降率分别吗3.5、2.8、1.1个百分点,各大中城市也还是稍微增幅降低之矛头。这样,想置楼的食指有点犹豫了,观望心态较深刻。房价年年涨,今年突出现了套,这就给大家的问题解不起:未来老三交五年,房价是下降还是涨?

甭纠结于那无异积术语了,那除了吃您脑子拧成麻花,真的不能够拉你哟。简单多少暴点看原型链吧,想点以及代码无关的从,比如人、妖以及人妖。

今底看法,来自原国家房地产开发集团董事长以来表态,“这个大家说降,那个家说降。调控了20年,虽然不够时跌落了,但最终还是水涨船高了。”需求进一步积愈老,房价还得上涨。

1)人是丁外妈生的,妖是怪他妈生的。人及妖都是目标实例,而人外妈妈和精他娘就是原型。原型为是目标,叫原型对象。

从人口增长,原材料上涨,土地供应量达都谈了严峻形式,从市场经济理论说说,房地产三顶五年内,供给与急需的地貌是啥样,至于价格涨不涨,大家一致看便理解。

   
 be365体育投注 1

至于要求:

先是,国内城镇化脚步正在加快。业内专家说
,中国之城镇化转移,还待十年时光才能够基本好。农村人口结合买屋如果去县,县城人买房想去市里、省城,人口正沿五线转四线城市、四丝转三丝都、三线二线转一线都,这样的路顺序流动。

亚,刚用太胜,谁为以压非停歇。比如北京,从04年到16年,定居人口从1300万增长到将近2200万,增涨了守平加倍。但是,脚步从未歇,正在通过建设雄安新区,转移扩张城市面人口的输入,各大中城市都当修建新区,城市对人资源的虹吸作用最强大,以至于本农村的田畴,你不行少克瞥见年轻小伙劳作的人影,他们及城工作、生活、安家置业,带动了地面楼市经济的升华。会生出90晚、00晚好以乡村定居?用底想转手,也从未那OUT的!

其三,国家正促进共享房源建设。这个点子要实行起来来,肯定对控制房价,起及绝对性的用意。但是,归根结底,中国口几千年之知识里,就是食有鱼、居有房、出有车。而且中国总人口都那么就好面子,三五年内虽有勇气站出来,甘心当无房族的,能有微微人?

季,说说限购。做法是针对的,真不克,那房价理性真没了,天花板只能摔下去。国人的购房权力都无法取得管用确保。但是,刚性需求,往往是首拟房子,这是居民应该的居住权,必须得到保障。对于旧城市人群,每20多年大增一代人,可是父母辈平均70基本上寒暑之寿命。房源需求的基数自不略。而农业户口要取消了,正充分光明的入城进镇当居民,这个数字,更加庞大。而村庄的前进为,在他于并多年之人,习惯了城生活,回乡创业之机率不多,而且,从南到北,现在且以盛,结婚到城里买房的初风俗,这为大为难在三五舅打破。

连通下,我们说说供给。在今日房产市场,对开发商提出了更加高之求。首先是自制资金量。从土地购置到建成七改成才卖,这个老流动量,往往是成千上万丁冒不起的差点。

末了,讲一下三五年走势图:在调控大方向下,房价当三五年内,一二线城市以呈现小幅度一直下跌、突而大幅度上涨的范围;三四城市,估计每年小涨;四五六线城市,每年一个幅,不断线。别看一二线暂时有降,因为她们今后土地供应连续不够,大幅上涨在19年前出现。毕竟安家置业是刚性需求,这是自然之。所以,三至五年后看房价,房价必然是会见同时涨了众,好吧,随你高升吧,这是市场经济的得。

2)人外母亲和人外爸啪啪啪能十分有一致堆放人小鬼、妖他母亲和精他爸啪啪啪能很有一致堆妖宝宝,啪啪啪就是构造函数,俗称造人。

万达广场对面,泰丰·牧马湖,一丝纯自然湖景洋房

今天小编为大家带来的是大亚湾万达广场邻近唯一的墅质大盘,小区规划的环境在大亚湾榜首,去押罢之老板娘无论一致勿欣赏,未来升值潜力巨大,一期待卖的凡别墅,二期是洋房,小区环境特别好,无论是自住或投资还老有价。家门口就是是万达商业,出行就享繁华,并且近14声泪俱下地铁口,去上深圳怪方便,买至即获利到。

泰丰牧马湖卢经理:130——8884——2643,将当出商备案价基础及享用附加92折团购优惠,专车接送包食宿

     be365体育投注 2

泰丰牧马湖楼盘简介

泰丰牧马湖类型总占地面积约56万㎡(其中住宅45万㎡,教育用地11万㎡),住宅总建筑面积约133万㎡,项目围绕原生湖泊而建,产品线长,涵盖别墅、小高层、高层等多种产品形态,以打“未来活居所”为意见,将计划建设成为一个“开放型混合功能的全龄型社区”。

商业:大润发、天虹商场、万达广场、翡翠山购物公园、海岸城欢乐综合体、京华购物广场、可可城商业广场、世纪城购物为主

医疗:惠亚医院、西区医院、惠州市第六人民医院、三暨医院

教育:北大培文惠州国际学校(本项目)、西区第一小学、兴汉小学、西区中心幼儿园、大亚湾第一中学、惠阳第一中学、崇雅中学

休闲:大亚湾儿童公园、板樟岭森林公园、红树林公园、亚公顶森林公园、风田水库

3)人外娘会记录啪啪啪的信息,所以可以经过人口外妈妈找到啪啪啪的音,也就是说能由此原型对象找到构造函数。

以售户型

75平米2房2厅1卫

阳台:纯南向,户型方正,紧凑实用;3.6m阔绰开间,通风采光俱优,阳光满屋;灵动空间,一栽户型,N种设计风格

82平米3房2厅1卫

平台:一线无敌湖景资源,独享臻稀美景;户型空间灵动,利用率高,悠享舒适生活;卧室超大湖景窗台,谱写先生跟

96平米3房2厅2卫

平台:4.5m官邸级开间,彰显主人礼宾之宜;一线无敌湖景,完美风光,一览无余;精致空间设计,阔气两坊,演绎好圈层

115平米4房2厅2卫

阳台:5m官邸级开间,彰显主人礼宾之宜;户型空间灵动,悠享舒适;精致空间设计,阔气两坊,演绎精彩圈层生活

泰丰牧马湖,深圳东边都见面资产您不得不打的理

1、深圳东头,千亿房企,大品牌实力保障

2、深圳东拓站,深惠同城新都会

3、一城轨,一地铁,双通路,三速,15及龙岗中心城

4、深圳14哀号线其余,临深轨道物业,资产潜力巨大。

5、城央核心醇熟配套,大润发、天虹商场、万达商圈、开车2min到惠阳南站

尽享城秋生活

私享片区五星级华美达国际大酒店,奢享近8万㎡首创主题街区商业,规建2所幼儿园、1所完小,让男女赢在自跑线及。超10000㎡私属生态内湖,写意湖居生活24年人打造,精装现楼交付,省心省时在泰丰而打的匪是房,是品质生活!

迎接对深莞惠感兴趣,有置业意向、投资打算的同伴来电咨询

泰丰牧马湖卢经理:130——8884——2643,将当开发商备案价基础及分享附加92赔团购优惠,专车接送包食宿

供的服务:第一时间发布户型、进度、效果图、样板房开、开盘、业内最新动态等情报;专业楼评、片区PK、新房二手房比、价格预计、户型点评等;不期举办看楼活动;您可以于上空相上面有涉的各种资讯及楼评!

4)人外妈妈得死很多乖乖,但这些小鬼就出一个妈妈,这便是原型的唯一性。

5)人外母亲啊是由人外妈妈他妈生的,通过人外娘找到人外母亲他母亲,再经过人口外妈妈他娘找到人外娘他母亲……,这个涉及叫做原型链。

 
   be365体育投注 3

6)原型链并无是极端的,当您通过人数外妈妈一直为上摸,最后发现你见面发觉食指外妈妈他娘他娘……的他妈还未是丁,也即是原型链最终指向null。

7)人外妈生的人见面有人的规范,妖他妈生的妖会有妖的丑陋,这为接轨。

 
   be365体育投注 4

8)你继承了你妈的肤色,你母亲继承了你母亲他妈妈的肤色,你妈妈他娘……,这即是原型链的接轨。

9)你谈话目标了,她母亲为你带齐房产证去提货,你只要没有,那它们妈会问你妈有没,你母亲没那其妈妈会问你妈妈她妈有无发出……这虽是原型链的进化搜索。

10)你会延续你妈的指南,但是若啊得去染发洗剪吹,就是说对象的性能可以起定义,会挂继承取得的性。

 
     be365体育投注 5

11)虽然你洗剪吹了传染成黄毛了,但你莫克转您妈妈的典范,你妈生的兄弟妹妹以及你的黄毛洗剪吹没一点关乎,就是说对象实例不克改原型的习性。

12)但是你家被你玩火烧了的话,那就是说你家你妈小公弟们家都被烧了,这就算是原型属性之共享。

13)你母亲外号阿珍,邻居大婶都吃你拍珍儿,但若妈头发从飘柔做成了金毛狮王后,隔壁大婶都改口叫你保证租仔,这叫原型的动态性。

 
     be365体育投注 6

14)你妈妈易美,又走至韩国整形,整届你母亲他母亲还认不出来,即使你妈头发易回飘柔了,但隔壁邻居还是于你钱毛狮王子。因为没有人认出你妈,整形后底你妈已经回炉再造了,这虽是原型的完整重写。

   
  be365体育投注 7

尼玛!你特么也是十足了! Don’t BB! Show me the
code!

function Person (name) { this.name = name; }
function Mother () { }
Mother.prototype = {    //Mother的原型
    age: 18,
    home: ['Beijing', 'Shanghai']
};
Person.prototype = new Mother(); //Person的原型为Mother

//用chrome调试工具查看,提供了__proto__接口查看原型,这里有两层原型,各位还是直接看chrome好一点。
var p1 = new Person('Jack'); //p1:'Jack'; __proto__:{__proto__:18,['Beijing','Shanghai']}
var p2 = new Person('Mark'); //p2:'Mark'; __proto__:{__proto__:18,['Beijing','Shanghai']}

p1.age = 20;  
/* 实例不能改变原型的基本值属性,正如你洗剪吹染黄毛跟你妈无关
 * 在p1实例下增加一个age属性的普通操作,与原型无关。跟var o={}; o.age=20一样。
 * p1:下面多了个属性age,而__proto__跟 Mother.prototype一样,age=18。
 * p2:只有属性name,__proto__跟 Mother.prototype一样
 */

p1.home[0] = 'Shenzhen'; 
/* 原型中引用类型属性的共享,正如你烧了你家,就是烧了你全家的家
 * 这个先过,下文再仔细唠叨一下可好?
 * p1:'Jack',20; __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 * p2:'Mark';    __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 */

p1.home = ['Hangzhou', 'Guangzhou']; 
/* 其实跟p1.age=20一样的操作。换成这个理解: var o={}; o.home=['big','house']
 * p1:'Jack',20,['Hangzhou','Guangzhou']; __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 * p2:'Mark';                             __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 */

delete p1.age;    
/* 删除实例的属性之后,原本被覆盖的原型值就重见天日了。正如你剃了光头,遗传的迷人小卷发就长出来了。
 * 这就是向上搜索机制,先搜你,然后你妈,再你妈他妈,所以你妈的改动会动态影响你。
 * p1:'Jack',['Hangzhou','Guangzhou']; __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 * p2:'Mark';                          __proto__:{__proto__:18,['Shenzhen','Shanghai']}
 */


Person.prototype.lastName = 'Jin'; 
/* 改写原型,动态反应到实例中。正如你妈变新潮了,邻居提起你都说你妈真潮。
 * 注意,这里我们改写的是Person的原型,就是往Mother里加一个lastName属性,等同于Mother.lastName='Jin'
 * 这里并不是改Mother.prototype,改动不同的层次,效果往往会有很大的差异。
 * p1:'Jack',['Hangzhou','Guangzhou']; __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai']}
 * p2:'Mark';                          __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai']}
 */

Person.prototype = { 
    age: 28, 
    address: { country: 'USA', city: 'Washington' }
};
var p3 = new Person('Obama'); 
/* 重写原型!这个时候Person的原型已经完全变成一个新的对象了,也就是说Person换了个妈,叫后妈。
 * 换成这样理解:var a=10; b=a; a=20; c=a。所以b不变,变得是c,所以p3跟着后妈变化,与亲妈无关。
 * p1:'Jack',['Hangzhou','Guangzhou']; __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai']}
 * p2:'Mark';                          __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai']}
 * p3:'Obama';__proto__: 28 {country: 'USA', city: 'Washington'}
 */


Mother.prototype.no = 9527;
/* 改写原型的原型,动态反应到实例中。正如你妈他妈变新潮了,邻居提起你都说你丫外婆真潮。
 * 注意,这里我们改写的是Mother.prototype,p1p2会变,但上面p3跟亲妈已经了无瓜葛了,不影响他。
 * p1:'Jack',['Hangzhou','Guangzhou']; __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai'],9527}
 * p2:'Mark';                          __proto__:{'jin',__proto__:18,['Shenzhen','Shanghai'],9527}
 * p3:'Obama';__proto__: 28 {country: 'USA', city: 'Washington'}
 */

Mother.prototype = { 
    car: 2, 
    hobby: ['run','walk']
};
var p4 = new Person('Tony');
/* 重写原型的原型!这个时候Mother的原型已经完全变成一个新的对象了!人他妈换了个后妈!
 * 由于上面Person与Mother已经断开联系了,这时候Mother怎么变已经不影响Person了。
 * p4:'Tony';__proto__: 28 {country: 'USA', city: 'Washington'}
 */

Person.prototype = new Mother(); //再次绑定
var p5 = new Person('Luffy');
// 这个时候如果需要应用这些改动的话,那就要重新将Person的原型绑到mother上了
// p5:'Luffy';__proto__:{__proto__: 2, ['run','walk']}

p1.__proto__.__proto__.__proto__.__proto__ //null,你说原型链的终点不是null?
Mother.__proto__.__proto__.__proto__    //null,你说原型链的终点不是null?

在押了基本能够清楚了咔嚓?

本重新来说说
p1.age = 20、p1.home = [‘Hangzhou’, ‘Guangzhou’] 和  p1.home[0] =
‘Shenzhen’ 的区别。 p1.home[0] = ‘Shenzhen’;  总结一下凡
p1.object.method,p1.object.property 这么的花样。

p1.age =
20;  p1.home = [‘Hangzhou’,
‘Guangzhou’];这简单句子还是比较好明的,先忘记原型吧,想想咱们是怎么也一个习以为常对象多属性的:

var obj = new Object();
obj.name='xxx'; 
obj.num = [100, 200];    

然是勿是就掌握了邪?一样同等的呀。

那么为什么 p1.home[0]
= ‘Shenzhen’ 不见面当 p1 下开创一个 home
数组属性,然后将该首位如为 ‘Shenzhen’呢?
我们要事先忘记了这个,想想上面的obj对象,如果写成这样: var obj.name =
‘xxx’, obj.num = [100, 200],能博取你要是之结果为?
显然,除了报错你哟还得无至。因为obj还非定义,又怎能够为中间在东西啊?同理,p1.home[0]被之
home 在 p1 下并未为定义,所以呢无克直接一步定义 home[0]
了。如果要是当p1下创造一个 home 数组,当然是这样写了:

p1.home = []; 
p1.home[0] = 'Shenzhen';

当时不就是是咱最好常用之法吧?

要是因此 p1.home[0]
= ‘Shenzhen’ 不直报错,是因在原型链中来一个找寻机制。当我们输入
p1.object
的时段,原型链的追寻机制是先期在实例中查找相应的价,找不交就以原型中找,还摸索不至即重新望上一级原型中寻觅……一直顶了原型链的极,就是到null还从来不找到的话,就返回一个
undefined。当我们输入 p1.home[0] 的时光,也是一致的找机制,先找 p1
看起无有名吧 home
的性能和法,然后逐级提高查找。最后我们当Mother的原型里面找到了,所以修改外虽一定给修改了
Mother 的原型啊。

平等句话概括:p1.home[0]
= ‘Shenzhen’  等同于  Mother.prototype.home[0] = ‘Shenzhen’。

 

是因为方的剖析可以掌握,原型链继承的机要问题在于属性之共享,很多辰光我们只是想共享方法而并无思使一并享属性,理想被每个实例应该产生单独的性质。于是,原型继承就生出矣脚的一定量种改良方式:

1)组合继承

be365体育投注 8be365体育投注 9

function Mother (age) {
    this.age = age;
    this.hobby = ['running','football']
}
Mother.prototype.showAge = function () {
    console.log(this.age); 
};

function Person (name, age) { 
    Mother.call(this, age);  //第二次执行
    this.name = name; 
}
Person.prototype = new Mother();  //第一次执行
Person.prototype.constructor = Person;
Person.prototype.showName = function () {
    console.log(this.name);
}

var p1 = new Person('Jack', 20); 
p1.hobby.push('basketball');  //p1:'Jack'; __proto__:20,['running','football']
var p2 = new Person('Mark', 18);  //p2:'Mark'; __proto__:18,['running','football']

View Code

结果是酱紫的: 

be365体育投注 10  be365体育投注 11

此地首先浅实践之时候,得到 Person.prototype.age
= undefined, Person.prototype.hobby =
[‘running’,’football’],第二潮实施呢尽管是 var p1 = new Person(‘Jack’,
20) 的时be365体育投注,得到 p1.age =20, p1.hobby =
[‘running’,’football’],push后就是改成了 p1.hobby =
[‘running’,’football’, ‘basketball’]。其实分辨好 this
的变迁,理解起来吧是比较简单的,把
this 简单替换一下就是可知获取这结果了。
如果感觉到理解起来比绕的语句,试着将脑筋里的定义扔掉吧,把团结当浏览器从上到下执行同一全套代码,结果是匪是不怕出去了吧?

透过第二蹩脚实施原型的构造函数
Mother(),我们以目标实例中复制了一致卖原型的性质,这样就算完事了跟原型属性之分离独立。细心之卿见面发觉,我们第一软调动用
Mother(),好像什么用都没有为,能无调用他吧?可以,就生出矣脚的寄生组合式继承。

2)寄生组合式继承

be365体育投注 12be365体育投注 13

function object(o){
    function F(){}
    F.prototype = o;
    return new F();
}

function inheritPrototype(Person, Mother){
    var prototype = object(Mother.prototype); 
    prototype.constructor = Person;    
    Person.prototype = prototype;    
}

function Mother (age) {
    this.age = age;
    this.hobby = ['running','football']
}
Mother.prototype.showAge = function () {
    console.log(this.age); 
};

function Person (name, age) { 
    Mother.call(this, age);
    this.name = name; 
}

inheritPrototype(Person, Mother);

Person.prototype.showName = function () {
    console.log(this.name);
}

var p1 = new Person('Jack', 20); 
p1.hobby.push('basketball');//p1:'Jack'; __proto__:20,['running','football']
var p2 = new Person('Mark', 18); //p2:'Mark'; __proto__:18,['running','football']

View Code

结果是酱紫的:

be365体育投注 14 be365体育投注 15

原型中不再出
age 和 hobby 属性了,只发有限单方法,正是我们纪念要之结果! 

首要点在于 object(o)
里面,这里借用了一个即对象来都行避免了调用new Mother(),然后将原型为 o
的新对象实例返回,从而形成了原型链的装。很绕,对吧,那是为咱们无可知一直设置
Person.prototype = Mother.prototype 啊。

 

小结


说了这么多,其实核心只出一个:属性共享和单独的支配,当您的靶子实例需要独自的特性,所有做法的本质都是在目标实例之中创建属性。若无考虑太多,你生可在Person里面一直定义你所用单独的属性来覆盖掉原型的性能。总之,使用原型继承的时光,要对于原型中的性质要特别注意,因为她们都是牵一发而动全身的在。

 

下简单罗列下js中开创目标的各种艺术,现在最常用底措施是整合模式,熟悉的同室可以跨了到文章最后尾点赞了。

1)原始模式

be365体育投注 16be365体育投注 17

//1.原始模式,对象字面量方式
var person = { 
    name: 'Jack',
    age: 18,
    sayName: function () { alert(this.name); }
};
//1.原始模式,Object构造函数方式
var person = new Object();
person.name = 'Jack';
person.age = 18;
person.sayName = function () {
    alert(this.name);
};

View Code

旗帜鲜明,当我们而创造批量之person1、person2……时,每次都使讹很多代码,资深copypaster都吃不排!然后就产生矣批量生产的厂子模式。

2)工厂模式

be365体育投注 18be365体育投注 19

//2.工厂模式,定义一个函数创建对象
function creatPerson (name, age) {
    var person = new Object(); 
    person.name = name;
    person.age = age;
    person.sayName = function () {
        alert(this.name);
    };
    return person; 
}

View Code

 工厂模式就是是批判量化生产,简单调用就得入造人模式(be365体育投注 20啪啪啪……be365体育投注 21be365体育投注 22)。指定姓名年龄就足以往一模一样积小宝宝啦,解放双手。但是由是工厂暗箱操作的,所以若切莫可知辨识是目标到底是什么类型、是人数还是狗傻傻分不穷(instanceof
测试呢 Object),另外每次造人时还使创一个独的temp对象,代码臃肿,雅蠛蝶啊。

3)构造函数

be365体育投注 23be365体育投注 24

//3.构造函数模式,为对象定义一个构造函数
function Person (name, age) {
    this.name = name;
    this.age = age;
    this.sayName = function () {
        alert(this.name);
    };    
}
var p1 = new Person('Jack', 18); //创建一个p1对象
Person('Jack', 18);    //属性方法都给window对象,window.name='Jack',window.sayName()会输出Jack

View Code

构造函数与C++、JAVA中类的构造函数类似,易于掌握,另外Person可以当作项目识别(instanceof
测试呢 Person
、Object)。但是富有实例依然是独立的,不同实例的不二法门其实是见仁见智之函数。这里将函数两独字忘了吧,把sayName当做一个目标就是吓明了,就是说张三的
sayName 和李四的 sayName是差的存在,但有目共睹我们期望之是集体一个 sayName
以节约内存。

4)原型模式

be365体育投注 25be365体育投注 26

//4.原型模式,直接定义prototype属性
function Person () {}
Person.prototype.name = 'Jack';
Person.prototype.age = 18;
Person.prototype.sayName = function () { alert(this.name); };
//4.原型模式,字面量定义方式
function Person () {}
Person.prototype = {
    name: 'Jack',
    age: 18,
    sayName: function () { alert(this.name); }
};
var p1 = new Person(); //name='Jack'
var p2 = new Person(); //name='Jack'

View Code

此处要小心的是原型属性与道的共享,即有实例中还只是是援引原型中之习性方法,任何一个地方产生的变动会挑起外实例的变动。

5)混合模式(构造+原型)

be365体育投注 27be365体育投注 28

//5. 原型构造组合模式,
function Person (name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype = {
    hobby: ['running','football'];
    sayName: function () { alert(this.name); },
    sayAge: function () { alert(this.age); }
};
var p1 = new Person('Jack', 20); 
//p1:'Jack',20; __proto__: ['running','football'],sayName,sayAge
var p2 = new Person('Mark', 18); 
//p1:'Mark',18;__proto__: ['running','football'],sayName,sayAge

View Code

做法是将需单独的习性方法放入构造函数中,而得共享的一些则放入原型中,这样做可以极其要命限度节省内存而与此同时保留对象实例的独立性。

 

放大张美图调节下~~~码字不易,顺手点赞哈!
下一样篇–闭包,再见。

be365体育投注 29

(图片出处:小周,转载请注明)

原创文章,转载请注明出处!本文链接:http://www.cnblogs.com/qieguo/p/5451626.html 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 mobile.365-838.com 版权所有