JS基础课程2
一,代码运行规则
1,变量的定义和赋值
函数名,参数名的命名规范:至少由字母,下划线,美元符号,数字其中的一种组成,但不能以数字开头.
变量也可以只定义,不赋值.如:
var num1;
这时被定义的变量num1的值是 undefined .
2,变量的引用
var num1 = 5; var num2 = num1;// 引用变量 num1 的值(引用变量时前面不加关键字 var)
3,变量值与实际值
var num1 = 5; var num2 = num1; console.log(num1); // 打印结果为5 console.log(num2); // 打印结果为5
其中 var num2 = num1 是将变量num1的实际值 5 ,赋值给新定义的变量 num2.
当 num1 的值被改变时也不会间接影响 num2 已有的值.
4,返回值
返回值 return 用来在函数体内向调用本函数的位置返回某些数据.,当函数没有返回值的时候,会有一个默认的返回值undefined。
//无返回值 function sum(a,b) { var result = a+b; } var sum = sum(1,2); //sum的值为undefined //有返回值 function sum(a,b) { var result = a+b; return result; } var sum = sum(1, 2); //sum的值为3,调用sum(1,2)时,该函数实际的结果为被返回的result的值,即3.
5,作用域
作用域分为局部作用域和全局作用域,在函数内部定义变量,仅对该函数有效,在全局定义变量,对全局有效。
二:类和对象
对象 = { 属性名 : 属性值, 属性名 : 属性值, ┅ ┅ }
对象的new表达式
new表达式的作用是生成一个对象,我们一般称其为实例对象。一般情况下,通过字面量来定义一个对象更为简单直接,所以尽量使用字面量定义的方法来生成对象。
三,this引用
1,this引用的指向
(1)函数调用模式的时候,this指向window。
(2)方法调用模式的时候,this指向方法所在的对象。
(3)构造函数模式的时候,this指向新生成的实例。
(4)apply/call调用模式的时候,this指向apply/call方法中的第一个参数。
this引肯定能指向某一特定对象,this引用是一种在JS代码中随时都可以使用的只读变量。
2,函数的apply与call方法
apply和call能够强制函数内的this指定某一对象.
对函数调用apply或call方法,就能够调用该函数.不考虑函数内的this引用的话,这和类似于 say() 这样的普通调用方式是一样的.
apply和call两者的区别仅在于被调用的函数(方法)内的this引用,this引用的是作为apply/call的第一个参数被传递的对象.而apply与call之间的不同之处在于两者对其他参数的
传递方式.
对于apply来说,剩余的参数将通过数组来传递,而call是直接按原样传递.
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数,apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
func.call(func1,var1,var2,var3); func.apply(func1,[var1,var2,var3]) ;//对应的apply写法
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入。
四,原型继承
原型prototype
访问构造函数的原型,使用prototype属性。
__proto__————实例
prototype————类
new关键字
new和一个构造函数一起使用,可以实例化一个类。
原型继承
在查询对象robot属性age是什么,先查找对象中的自有属性,如果没有找到,则查找robot的继承属性,直到查找到age或者一个原型是null的对象为止。
在给对象robot的age属性赋值时,如果robot自有属性中已经有一个属性age,则改变age的值,若robot中不存在自有属性age,只存在继承属性age或者所有属性中都没有age属性, 则为robot创建一个自有属性age并为其赋值.赋值只针对自有属性.