收藏此站 联系我们 网站
当前位置:首页» 行业网站案例 » 【建站服务】兰考网站优化【兰考开通400电话】兰考网站搭建、兰考微信公众号推文外包、兰考开通京东拼多多设计、兰考淘宝装修-域名申请

【建站服务】兰考网站优化【兰考开通400电话】兰考网站搭建、兰考微信公众号推文外包、兰考开通京东拼多多设计、兰考淘宝装修-域名申请

作者: 风兰 . 阅读量: 3 . 发表时间:2022-09-20 15:33:30

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


兰考网站优化【兰考开通400电话】兰考网站搭建、兰考微信公众号推文外包、兰考开通京东拼多多设计、兰考淘宝装修


兰考,河南省开封市下辖县 [1-2]  ,河南省直管县 [2]  ,位于九曲黄河最后一道弯 [3]  ,总面积1116平方公里 ,总人口85.91万人。 [4]  是河南省“一极两圈三层”中“半小时交通圈”的重要组成部分。 [5]  兰考县在春秋时为户牖邑,秦朝于县北置济阳县是兰考建县之始。公元前5年,汉光武帝刘秀生于县北济阳宫。 [6-7]  9年,改东昏县为东明县。1218年,东明县城被废为通安堡,新县城迁至黄河之北冤句县旧地。1232年,以黄河之南地析置为兰阳县、仪封县两县。1783年3月,考城县县城首次迁至兰考县境内。1825年,仪封县并入兰阳县,称兰仪县,仪封以乡隶之。1909年,为避溥仪帝讳,改兰仪县为兰封县。1954年6月,兰封县与考城县西部合并,以二县首字为名,称兰考县。 [6] 

陇海铁路、郑徐高铁穿境而过设兰考站、兰考南站,兰考至菏泽菏兰城际铁路、兰考至菏泽至青岛董家口港铁路、兰考至开封郑开兰城际铁路等即将开工建设。国道G220、G310、G106在县城交汇,连霍高速公路、日南高速公路、兰焦高速公路(规划)在境内交叉而过。距离新郑机场仅1小时,距离连云港仅4小时。 [5] 

兰考是泡桐之乡 [5]  、国家园林县城 、国家卫生县城 [8]  、全国文明城市提名城市 [9]  、省级生态县、全国双拥模范县、国家新型城镇化试点县 [10]  、首批国家级生态保护与建设示范区、全国社会信用体系建设综合性示范试点县 [11]  、全国首个普惠金融改革试验区 [12]  、省级可持续发展实验区 [13]  、河南改革发展和加强党的建设综合试验示范县、2019年全国村庄清洁行动先进县 [14-15]  、县城新型城镇化建设示范县。 [16] 


30-自己实现一个 bind 函数

原理:通过apply 或者call 方法来实现。


(1)初始版本


Function.prototype.bind=function(obj,arg){

var arg=Array.prototype.slice.call(arguments,1); 

  var context=this;

return function(newArg){ 

    arg=arg.concat(Array.prototype.slice.call(newArg)); 

    return context.apply(obj,arg);

}

}


(2) 考虑到原型链

为什么要考虑?因为在 new 一个bind 过生成的新函数的时候,必须的条件是要继承原函数的原型


Function.prototype.bind=function(obj,arg){

var arg=Array.prototype.slice.call(arguments,1); 

  var context=this;

var bound=function(newArg){ 

    arg=arg.concat(Array.prototype.slice.call(newArg)); 

    return context.apply(obj,arg);

}

  

var F=function(){}

//这里需要一个寄生组合继承

  F.prototype=context.prototype; 

  bound.prototype=new F(); 

  return bound;

}


31-用 setTimeout 来实现 setInterval

1、用setTimeout()方法来模拟setInterval()与setInterval()之间的什么区别?


首先来看setInterval 的缺陷,使用setInterval()创建的定时器确保了定时器代码规则地插入队列中。


这个问题在于:如果定时器代码在代码再次添加到队列之前还没完成执行, 结果就会导致定时器代码连续运行好几次。而之间没有间隔。


不过幸运的是:javascript引擎足够聪明,能够避免这个问题。当且仅当没有该定时器的如何代码实例时,才会将定时器代码添加到队列中。


这确保了定时器代码加入队列中最小的时间间隔为指定时间。


这种重复定时器的规则有两个问题:1.某些间隔会被跳过 2.多个定时器的代码执行时间可能会比预期小。


下面举例子说明:


假设,某个 onclick 事件处理程序使用啦 setInterval()来设置了一个 200ms 的重复定时器。如果事件处理程序花了 300ms 多一点的时间完成。



这个例子中的第一个定时器是在 205ms 处添加到队列中,但是要过 300ms 才能执行。在405ms 又添加了一个副本。


在一个间隔,605ms 处,第一个定时器代码还在执行中,而且队列中已经有了一个定时器实例,结果是 605ms 的定时器代码不会添加到队列中。


结果是在 5ms 处添加的定时器代码执行结束后,405 处的代码立即执行。


function say(){

//something setTimeout(say,200);

}

setTimeout(say,200)或者setTimeout(function(){

//do something setTimeout(arguments.callee,200);

},200);


32-JS 怎么控制一次加载一张图片,加载完后再加载下一张

(1)方法 1


<script type="text/javascript"> 

  var obj=new Image();

obj.src="http://www.phpernote.com/uploadfiles/editor/201107240502201179.jpg"; 

obj.onload=function(){

alert('图片的宽度为:'+obj.width+';图片的高度为:'+obj.height);

document.getElementById("mypic").innnerHTML="<img src='"+this.src+"' />";

}

</script>


<div id="mypic">onloading……</div>


(2)方法 2


<script type="text/javascript"> 

  var obj=new Image();

obj.src="http://www.phpernote.com/uploadfiles/editor/201107240502201179.jpg";

obj.onreadystatechange=function(){

if(this.readyState=="complete"){

alert('图片的宽度为:'+obj.width+';图片的高度为:'+obj.height);

document.getElementById("mypic").innnerHTML="<img src='"+this.src+"' />";

}

}

</script>


<div id="mypic">onloading……</div>


33-代码的执行顺序

setTimeout(function(){

  console.log(1)

},0); 


new Promise(function(resolve,reject){ 

  console.log(2);

resolve();

}).then(function(){

  console.log(3);

}).then(function(){

  console.log(4);

}); 

process.nextTick(function(){

  console.log(5);

}); 


console.log(6);

//输出 2,6,5,3,4,1


为什么呢?


具体请参考这篇文章:


从promise、process.nextTick、setTimeout 出发,谈谈Event Loop 中的Job queue


34-如何实现 sleep 的效果(es5 或者 es6)

1、while 循环的方式


function sleep(ms){

var start=Date.now();

  expire=start+ms; 

  while(Date.now()<expire); 

  console.log('1111');

return;

}


执行sleep(1000)之后,休眠了 1000ms 之后输出了 1111。上述循环的方式缺点很明显, 容易造成死循环。


2、通过promise 来实现


function sleep(ms){

var temple=new Promise( (resolve)=>{

console.log(111);setTimeout(resolve,ms)

});

return temple

}


sleep(500).then(function(){

//console.log(222)

})


//先输出了 111,延迟 500ms 后输出 222 (3)通过async 封装

function sleep(ms){

return new Promise((resolve)=>setTimeout(resolve,ms));

}


async function test(){

var temple=await sleep(1000); 

  console.log(1111)

return temple

}

test();


//延迟 1000ms 输出了 1111 (4).通过generate 来实现function* sleep(ms){

yield new Promise(function(resolve,reject){ 

  console.log(111);

setTimeout(resolve,ms);

})


sleep(500).next().value.then(function(){

  console.log(2222);

})


35-简单的实现一个promise

首先明确什么是 promiseA+规范,参考规范的地址:primise A+规范


如何实现一个promise,参考这篇文章:实现一个完美符合Promise/A+规范的Promise


一般不会问的很详细,只要能写出上述文章中的 v1.0 版本的简单promise 即可。


36-Function.proto(getPrototypeOf)是什么?

获取一个对象的原型,在chrome 中可以通过_proto_的形式,或者在 ES6 中可以通过Object.getPrototypeOf 的形式。


那么Function.proto 是什么么?也就是说Function 由什么对象继承而来,我们来做如下判别。


Function. proto ==Object.prototype //false


Function. proto ==Function.prototype //true


我们发现Function 的原型也是Function。我们用图可以来明确这个关系:



37-实现 JS 中所有对象的深度克隆(包装对象,Date 对象,正则对象)

通过递归可以简单实现对象的深度克隆,但是这种方法不管是 ES6 还是ES5 实现,都有同样的缺陷,就是只能实现特定的 object 的深度复制(比如数组和函数),不能实现包装对象Number,String , Boolean,以及Date 对象,RegExp 对象的复制。


(1)前文的方法


function deepClone(obj){

var newObj= obj instanceof Array?[]:{}; 

  for(var i in obj){

newObj[i]=typeof obj[i]=='object'? deepClone(obj[i]):obj[i];

}

return newObj;

}


这种方法可以实现一般对象和数组对象的克隆,比如:


var arr=[1,2,3];

var newArr=deepClone(arr);

// newArr->[1,2,3] 

var obj={

  x:1,

  y:2

}

var newObj=deepClone(obj);

// newObj={x:1,y:2}


但是不能实现例如包装对象 Number,String,Boolean,以及正则对象 RegExp 和Date 对象的克隆,比如:


//Number 包装对象

var num=new Number(1); typeof num // "object"

var newNum=deepClone(num);

//newNum -> {} 空对象


//String 包装对象

var str=new String("hello"); typeof str //"object"

var newStr=deepClone(str);

//newStr-> {0:'h',1:'e',2:'l',3:'l',4:'o'};


//Boolean 包装对象


var bol=new Boolean(true); typeof bol //"object"

var newBol=deepClone(bol);

// newBol ->{}  空对象


(2)valueof()函数


所有对象都有valueOf 方法,valueOf 方法对于:如果存在任意原始值,它就默认将对象转换为表示它的原始值。对象是复合值,而且大多数对象无法真正表示为一个原始值, 因此默认的valueOf()方法简单地返回对象本身,而不是返回一个原始值。数组、函数和正则表达式简单地继承了这个默认方法,调用这些类型的实例的valueOf()方法只是简单返回这个对象本身。

对于原始值或者包装类:


function baseClone(base){ return base.valueOf();

}


//Number

var num=new Number(1);

var newNum=baseClone(num);

//newNum->1

//String

var str=new String('hello'); var newStr=baseClone(str);

// newStr->"hello"

//Boolean

var bol=new Boolean(true); var newBol=baseClone(bol);

//newBol-> true


其实对于包装类,完全可以用=号来进行克隆,其实没有深度克隆一说, 这里用valueOf 实现,语法上比较符合规范。


对于Date 类型:

因为valueOf 方法,日期类定义的 valueOf()方法会返回它的一个内部表示:1970 年 1 月1 日以来的毫秒数.因此我们可以在 Date 的原型上定义克隆的方法:


Date.prototype.clone=function(){

return new Date(this.valueOf());

}

var date=new Date('2010'); 

var newDate=date.clone();

// newDate-> Fri Jan 01 2010 08:00:00 GMT+0800


对于正则对象RegExp:


RegExp.prototype.clone = function() { 

  var pattern = this.valueOf();

var flags = '';

flags += pattern.global ? 'g' : '';

flags += pattern.ignoreCase ? 'i' : ''; 

  flags += pattern.multiline ? 'm' : '';

return new RegExp(pattern.source, flags);

};


var reg=new RegExp('/111/'); 

var newReg=reg.clone();

//newReg-> //111//

微信图片_20210425092605.jpg

兰考网站优化兰考开通400电话兰考网站搭建、兰考微信公众号推文外包、兰考开通京东拼多多设计、兰考淘宝装修


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务