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