夺命雷公狗---javascript NO:23 JavaScript中的this指针

1、自定义类中的this指针

在php中,我们在自定义类时,属性都是预定义在我们的自定义类中,而在JavaScript代码中,所有对象的属性和方法都是动态添加到对象中,那么可不可以让我们的自定义对象自动拥有类的属性和方法?

答:可以,通过this指针

例1:谁实例化自定义类,那么类中的this就指向谁

 

<!DOCTYPE html>
<html>
<head>
<meta charset=’utf-8′>
<title></title>
</head>
<body>
<script>
function Person(){
this.name = ‘lisi';
this.age = 23;
}
var p1 = new Person();
alert(p1.name);
alert(p1.age);
</script>
</body>
</html>

 

 

例2:当我们创建第二个对象,会不会自动拥有name和age属性

 

<!DOCTYPE html>
<html>
<head>
<meta charset=’utf-8′>
<title></title>
</head>
<body>
<script>
function Person(){
this.name = ‘lisi';
this.age = 23;
}
var p1 = new Person();
var p2 = new Person();
alert(p1.name);
alert(p2.age);
</script>
</body>
</html>

 

例3:以上代码可以实现自定义对象自动拥有类中属性和方法,但是其违背事务逻辑,所有的自定义对象拥有的name和age属性都是一样的,改进上题:

 

 
<!DOCTYPE html>
<html>
<head>
<meta charset=’utf-8′>
<title></title>
</head>
<body>
<script>
function Person(name,age){
this.name = name;
this.age = age;
}
var p1 = new Person(‘zhangsan’,22);
var p2 = new Person(‘lisi’,’23’);
alert(p1.name);
alert(p2.age);
</script>
</body>
</html>

 

 

注:在我们的JavaScript代码中,函数的形参是不能设置默认值的,以下情况是不允许的(错误的)

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset=’utf-8′>
<title></title>
</head>
<body>
<script>
function Person(name,age=23){
this.name = name;
this.age = age;
}
var p1 = new Person(‘zhangsan’,22);
var p2 = new Person(‘lisi’,’23’);
alert(p1.name);
alert(p2.age);
</script>
</body>
</html>

 

 

2、深入理解this指针

结论:在我们的JavaScript全局作用域中,也是存在this指针的,其指向Window对象

验证以上结论:

例1:尝试理解下面两条语句:

 

i=10;
alert(this.i); //this->window==window.i    10

 

 

例2:

 

function test(){
this.i=100;
}
i=10;
test();
alert(this.i); //100

 

 

示例:

 

<!DOCTYPE html>
<html>
<head>
<meta charset=’utf-8′>
<title></title>
</head>
<body>
<script>
function test(){
this.i = 100;
}
i = 10;
test();
alert(this.i);//100
</script>
</body>
</html>

 

 

例3:

 

var i=100;
function test(){
i=200;
}
test()
alert(i);  //200

 

posted @ 2015-12-09 10:08  夺命雷公狗  阅读(168)  评论(0编辑  收藏  举报