1 <script >
2 //this知识 单词知识:property:属性 prototype:原型
3 //*Q:什么是this?
4 //*A:所有函数内部都有一个this,任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
5 //* 它的值是调用函数的当前对象
6 //*Q:如何确定this的值
7 //*A:test:window
8 // p.test():p对象
9 // new test():新创建的对象
10 // p.call(obj):obj
11
12 function Person(color) {
13 console.log(this)
14 this.color = color;
15 this.getColor = function () {
16 console.log(this)
17 return this.color;
18 };
19 this.setColor = function (color) {
20 console.log(this)
21 this.color = color;
22 };
23 }
24
25 Person("red"); //this是谁? window
26
27 var p = new Person("yello"); //this是谁? p
28
29 p.getColor(); //this是谁? p
30
31 var obj = {};
32 p.setColor.call(obj, "black"); //this是谁? obj
33
34 var test = p.setColor;
35 test(); //this是谁? window
36
37 function fun1() {
38 function fun2() {
39 console.log(this);
40 }
41
42 fun2(); //this是谁? window
43 }
44 fun1();
45
46 //JS关于加分号问题‘
47 //js一条语句后面可以不加分号
48 //是否加分号是编码风格问题,没有应该或不应该,只有你喜不喜欢
49 //但在以下情况下不加分号会出现问题,要求需要在前面加一个分号
50 //小括号开头的前一条语句
51 //中括号开头的前一条语句
52 var a=3
53 ;(function () {//匿名函数自调用前面如果不加分号会出现错误,所以需要在前面加上一个括号
54
55 })()
56
57 var b=4
58 ;[1,2].forEach(function () {//这里在IDE上不会显示红线,但在运行中会出现编译错误,所以这里也要加一个分号,最好是加在一条语句的前面
59
60 })
61 /*
62 编译器的错误理解:var b=4[1,2].forEach(function () {//就会报undefined
63 })
64 */
65 </script>