zoukankan      html  css  js  c++  java
  • JS学习-第四节

    一,函数

    使用函数声明创建一个函数:

      function 函数名([形参1,形参2,形参3])

      {

        语句。。。

      }

      调用的时候:函数名();

    使用函数表达式创建一个函数:

      var 函数名=function([形参1,形参2])

      {

        语句。。。

      }

      var fun3=function()

      {

        console.log("12345");  

      }

    二,函数的参数

    (1)在调用参数时候,可以在()中指定实参,实参将会赋值给函数中对应的形参。

    (2)调用函数时解析器不会检查实参的类型和数量,实参可以是任意的类型也可以是一个对象。

    var obj={

    name:"孙悟空",

    age:18,

    gender:"男",

    address:"花果山"

    }

    function sayhello(o)

    {

    console.log(o.name+o.age+o.gender+o.address);

    }

    sayhello(obj);

    三,函数的返回值

    (1)一般函数返回一个值就行,不需要进行输出处理。

    (2)如果return后面不加值或者无return,就会返回undefined.

      

      fun(mianji(10));//调用函数,相当于使用函数的返回值

      fun(mianji);//调用函数对象,相当于直接使用函数对象

    四,立即执行函数

    函数对象:

    (function(){

      alert("12345");

      })();

    以上函数立即执行,不需要调用

    obj.sayname();//调方法

    fun();//调函数

    五,枚举对象中的属性

    使用for。。in。。语句

    var obj={

    name:"孙悟空",

    age:18,

    gender:"男",

    address:"花果山"

    }

    for(var n in obj)

    {

      console.log(n);

      console.log(obj[n]);//对象[属性名]=属性值;

    }

    六,作用域

    1,全局作用域

      直接卸载script标签中的JS语句中,在页面打开是创建,页面关闭时销毁。有一个全局对象window,它代表的是一个浏览器的窗口,它由浏览器创建我们可以直接使用。创建的变量都会作为window对象的属性进行保存。创建的函数都会作为window对象的方法进行保存。

      变量的声明提前:使用var关键字声明的变量,会在所有的代码执行之前被声明。但是如果不用var则不会被提前

      函数的声明提前:使用函数声明形式创建的函数function函数(){},他会在所有的代码执行之前就被创建

      使用函数表达式创建的函数不会被声明提前。

    2,函数作用域

      在函数作用域中可以访问到全局变量

      函数中,不适用var声明的变量都会成为全局变量

    七,this

      解析器在调用函数每次都会向函数内部传递一个隐含的参数,这个隐含的参数就是this,this指向的是一个对象,这个对象我们称为函数执行的上下文对象,数据函数的调用方法的不同,this会指向不同的对象

      (1)以函数形式调用时候,this指的是window,比如fun()

      (2)以方法形式调用时候,this指的是当前方法的对象,比如obj.name()

    八,使用工厂方法创建对象

    function createPerson(name,age,gender)

    {

    var obj=new Object();

    obj.name=name;

    obj.age=age;

    obj.gender=gender;

    obj.sayName=function()

    {

      alert(this.name);

    }

    return obj;

    }

     var obj2=createPerson("猪八戒",28,“男”);

     var obj3=createPerson("孙悟空",29,“男”);

    console.log(obj2);

    console.log(obj3);

    九,构造函数

      习惯第一个字母大写,普通函数直接调用,构造函数需要使用new关键字调用

      构造对象创建过程:

      (1)立即创建一个新的对象

      (2)将新建的对象设置为函数中this

      (3)逐行执行函数中的代码

      (4)将新建的对象作为返回值返回

    使用instanceof可以检查一个对象是否是一个类的实例

    语法:

      对象 instanceof 类名

    如果是真返回true

      所有的对象都是Object的对象,所有的对象做instanceof检查时候都是true。

      

    this情况:

      1,当以函数的形式调用的时候,this是window;

      2,当以方法的形式调用时,调用方法this就是谁;

      3,当以构造函数的形式调用时,this就是新创建的那个对象。

    十,原型对象

      我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype。这个属性对应着一个对象,这个对象就是我们说的原型对象。

      如果函数作为普通函数调用prototype则没有任何作用,当函数以构造函数的形式调用时,他所创建的对象中都会有一个隐含的属性。指向该构造函数的原型对象,我们可以通过__proto__来访问该属性。

      原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。

      当我们访问对象的第一个属性或方法时,他会在对象自身中寻找,如果有直接使用,没有则去原型里找。如果还是没有,则去原型的原型里面找

      MyClass.prototype.a=123;//添加原型属性a

      var mc=new MyClass();

      mc.a;//123

      一会后我们创建构造函数中,可以将这些对象共有的属性和方法,同意添加到构造函数的原型中。

      使用in 检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true。如

      console.log("name" in mc);

      使用hasOwnProperty()来检查对象自身中是否含有该属性,使用该方法只有当对象自身中含有属性时,才会返回true。如

      console.log(mc.hasOwnProperty("name"));

      console.log(mc.__proto__);

    十一,toString

      当我们直接在页面上打印一个对象时候,事实上输出的是对象的toString方法

      如果创建了多个对象,想要多个对象的toString方法都重写,我们需要在原形里面重写toString方法。如:

      Person.prototype.toString=function(){

      return "Person[name]="+this.name;

      }

  • 相关阅读:
    hdu 1022 Train Problem I 模拟
    Eclipse plugin开发 —实现语法高亮
    一篇英文版的eclipse插件textEditor资料
    (转)Eclipse常用快捷键
    Eclipse plugin开发 —实现单行与多行注释
    Eclipse plugin开发 —实现文本内容帮助
    CSS borderstyle
    ClassLoader getResource
    javascript add table content from xml
    postgres 当前时间
  • 原文地址:https://www.cnblogs.com/lumc5/p/15122051.html
Copyright © 2011-2022 走看看