闭包,跨域与原型链

闭包

闭包是指A函数包含B函数,而B函数能够调用A函数(即父函数)里的变量,我们就称B函数是闭包。
代码演示:

function init(){
    var name = 100;
    function(){
        alert(name) 
    }  //B函数即闭包函数
}

闭包在应用中随处可见,使用闭包就是为了代码运行的整洁。

跨域

当请求一个url的协议、域名、端口三者之间任意一个与当前页面不同即为跨域。

同步ajax请求

五个步骤如下:
1.创建异步对象

var xhr = new XMLHttpRequest();

2.设置请求方式,请求url:

// get请求如果有参数就需要在url后面拼接参数,
// post如果有参数,就在请求体中传递 
xhr.open("get","validate.php?username="+name)
xhr.open("post","validate.php");

3.设置请求头(GET方式忽略此步骤):setRequestHeader()

xhr.send("username="+name);

4.设置请求体 send();

xhr.send("username="+name);

5.让异步对象接收服务器的响应数据

xhr.onreadystatechange = function(){ 
if(xhr.status == 200 && xhr.readyState == 4){ 
 console.log(xhr.responseText);
 }

成功标志:1.服务器成功响应了 2.异步对象的响应状态为4(数据解析完毕可以使用了)

同源策略

ajax请求的页面或资源只能是同一个域下面的资源,不能是其他域的资源,这是在设计ajax时基于安全的考虑。报错如下:

XMLHttpRequest cannot load https://www.baidu.com/. No  
'Access-Control-Allow-Origin' header is present on the requested resource.  
Origin 'null' is therefore not allowed access.

解决异步请求跨域

采用jsonp异步跨域请求:(这里偷懒用了JQ)

$.ajax({
    url:'js/data.js',
    type:'get',
    dataType:'jsonp',
    jsonpCallback:'fnBack'
})
.done(function(data){
    alert(data.name);
})
.fail(function() {
    alert('服务器超时,请重试!');
});

// data.js里面的数据: fnBack({"name":"tom","age":18});

原型链

每个对象都有自己的原型_proto_,原型又会有对应自己的原型即原型的原型,如此可以形成原型链。查找特定属性时,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是没有的话再去向原型对象的原型对象里去寻找… 这个操作被委托在整个原型链上,这个就是我们说的原型链了。

_ proto _

_proto_是原型链查询中实际用到的,它总是指向 prototype,换句话说就是指向构造函数的原型对象,它是对象独有的。

prototype

prototype属性,它是函数所独有的,它是从一个函数指向一个对象。它的含义是函数的原型对象,也就是这个函数(其实所有函数都可以作为构造函数)所创建的实例的原型对象; 这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象);

资料来源:https://blog.csdn.net/Hulu_IT/article/details/89363145 Ajax清晰请求步骤与代码
原创 西瓜皮儿的皮儿

发布了12 篇原创文章 · 获赞 0 · 访问量 1118

猜你喜欢

转载自blog.csdn.net/weixin_45931321/article/details/104072592