【建站服务】兰考网站优化【兰考开通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//

兰考网站优化【兰考开通400电话】兰考网站搭建、兰考微信公众号推文外包、兰考开通京东拼多多设计、兰考淘宝装修
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站


