JavaScript全面了解作用域(基础、this、闭包、继承)之二
this这个东西,确实不好懂,很具有迷惑性,一不小心就错了。
this代表的是当前的作用域,知道当前的作用域,就可以确定了,但是这不是很容易确定。
第四部分:在全局中使用this
<script>
var a = 2;
function test(){
var a = 1;
document.writeln(a);
document.writeln(this.a);
}
test();
document.write(this.a);
</script>
<script>
var a = 2;
function test(){
var a = 1;
document.writeln(a);
document.writeln(this.a);
}
test();
document.write(this.a);
</script>
你认为结果是什么呢?1 1 2?但是结果是1 2 2
很有疑问吧?调用这个函数是在window中调用,所以说this就是window,window.a=2。不是this存在test()当中,this就是在test域。
第五部分:在对象中使用this
<script>
var name = "JIM";
function Person(){
this.name = "Mike";
this.myname = getName;
}
function getName(){
return this.name;
}
var person = new Person();
document.write(person.myname());
</script>
<script>
var name = "JIM";
function Person(){
this.name = "Mike";
this.myname = getName;
}
function getName(){
return this.name;
}
var person = new Person();
document.write(person.myname());
</script>
结果是Mike。this所在的作用域是在person当中,先搜索其中的属性,然后搜索原型,一直找到。
<script>
var name = "JIM";
function Person(){
this.myname = getName;
}
Person.prototype.name="Mike";
function getName(){
return this.name;
}
var person = new Person();
document.write(person.myname());
</script>
<script>
var name = "JIM";
function Person(){
this.myname = getName;
}
Person.prototype.name="Mike";
function getName(){
return this.name;
}
var person = new Person();
document.write(person.myname());
</script>
这里一直搜索到Person.prototype.name
第五部分:this在继承当中使用
<script>
var name = "JIM";
function Person(){
this.myname = getName;
this.name="Mike";
}
function Son()
{
this.name="Sam";
}
Son.prototype=new Person();
function getName(){
return this.name;
}
var son = new Son();
document.write(son.myname());
</script>
<script>
var name = "JIM";
function Person(){
this.myname = getName;
this.name="Mike";
}
function Son()
{
this.name="Sam";
}
Son.
补充:web前端 , JavaScript ,