关于this

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>关于this</title>
</head>
<body>
<div id="box"></div>
<script>
//this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this最终指向的是那个调用他它的对象(这句话有点误差,但是绝大多数情况下符合)
// 情况一:如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window,(严格模式中的this指向的不是window)
// 情况二:如果一个函数中有this,这个函数有被上一级的对象所调用,那么this指向的就是上一级的对象.
// 情况三:如果一个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调用,this指向的也只是它上一届的对象.
//当this遇到return,如果返回值是一个对象(null除外),那么this指向的就是那个返回的对象,如果返回值不是一个对象,那么this指向函数的实例。
//实例一:
function fn1() {
this.user = "aaa";
return {};
}
var a = new fn1
console.log(a.user) //undefined
//实例二:
function fn2() {
this.user = "aaa";
return function () {
};
}
var b = new fn2
console.log(b.user) //undefined
//实例三:
function fn3() {
this.user = "aaa";
return 1;
}
var c = new fn3
console.log(c.user) //aaa
//实例四:
function fn4() {
this.user = "aaa";
return undefined;
}
var d = new fn4
console.log(d.user) //aaa
//实例五:
var f = {
user:"bbb",
age:2
}
function fn5() {
this.user = "aaa";
return f;
}
var e = new fn5
console.log(e.user) //bbb

var o = {
a:10,
b:{
a:12,
fn:function () {
console.log(this.a)
}
}
}
o.b.fn() //12
</script>
</body>
</html>
posted @ 2017-09-26 22:25  六六的菜园子  阅读(140)  评论(0编辑  收藏  举报