【阅读】《head first html5》第四章——javascript函数和对象

来源:互联网 发布:防水纹身贴淘宝 编辑:程序博客网 时间:2024/06/07 12:33
  • 要创建一个函数,要使用function关键字
  • 函数可以是命名函数,也可以是匿名的
  • 函数的命名规则与变量命名规则相同
  • 函数体放在大括号之间,包含完成函数工作的具体语句
  • 函数可以用return语句返回一个值
  • 要调用一个函数,需要使用函数名,并传入它需要的所有实参
  • javascript使用传值的方式传递函数
  • 传递一个对象作为一个实参时,比如dog,形参会得到这个对象引用的一个副本(
    function student(name, age, height) {this.name = name;this.age = age;this.height = height;}window.onload = function(){var man = new student("小明", 21, 170);alert(man.name);test(man);alert(man.name);};function test(student) {student.name = "小红";student.age = 18;}

    以上先输出小明,之后输出小红;这与java是类似的,java要实现上面的例子可以这样
    public class Text {public static void main(String[] args) {Student student = new Student("小明", 18, 170);System.out.println(student.name);test(student);System.out.println(student.name);}static class Student {String name;int age;double height;public Student(String name, int age, double height) {this.name = name;this.age = age;this.height = height;}}public static void test(Student student) {student.name = "小红";}}

  • 函数中定义的变量,包括形参,都称为局部变量
  • 函数外定义的变量称为全局变量
  • 局部变量在定义该变量的函数之外不可见(就是不能使用到那个变量)这称为变量的作用域
  • 如果声明一个局部变量时与一个全局变量同名,这个局部变量就会遮蔽全局变量(优先使用局部变量)
  • 从页面链接到javascript文件时,所有全局变量都定义在同一个全局空间中。
  • 如果赋一个新变量而没有使用var关键字,这个变量就是全局的,即使在一个函数中首次赋值(如果你的变量是声明在函数中的那它的作用域还是在那个函数中,个人不是很理解这句话)
  • 函数也是值,可以赋给变量、传递给其他函数、存储在数组中,还可以付给对象属性
  • 对象是属性的集合
  • 可以使用点记法或中括号记法访问对象的属性
  • 如果使用[]记法,要把属性名作为一个串用引号引起来,例如myObject["name"]。
  • 可以改变一个属性的值、删除属性(delete people.name)或者想对象增加新属性
  • 可以使用一个for-in循环枚举对象的的属性
  • 赋给一个对象属性的函数称为方法。
  • 方法可以使用一个特殊的关键字this来引用调用这个方法的对象(this就是它本身)
  • 构造函数是创建对象的函数
  • 构造函数的任务是创建一个新对象,并初始化这个对象的属性
  • 要调用一个构造函数创建对象,需要使用new关键字。例如new Dog();
  • windows是全局对象(也就是说有的地方你不加windows实际上它自己就帮你加了,比如windows.alert("")==alert(""));
  • document是windows的一个属性
  • document.getElementById方法会返回一个元素对象。

注意:

  • 在写方法的形参时,不需要在参数前加var,就算那个是参数是Array也不需要
  • 如果有同名的函数,将使用较后面声明的那个,哪怕是参数不同(这点与java不同)
  • 创建对象的时候要注意不同属性之间不是用分号而是用逗号间隔的
    var man = {name: "小刚",age: 19}

  • 使用for..in语句遍历的时候要这样
    var students = new Array("小明","小强","小红","小白");for(index in students) {alert(students[index]);}
    这里的index是0,1,2.3,不是像java那样直接把姓名取出来得
  • 删除对象的属性时,哪怕这个对象根本没有这个属性,他也可以返回一个true
    var a = new people("小明", "男", 19);if(delete a.height) {alert("OK");} else {alert("No OK");}
    这样输出的是OK,就算people中没有height这个属性
0 0
原创粉丝点击