关于js中函数的创建、调用和定义对象的介绍

js是基于对象的脚本语言,js代码复用的单位是函数,但它的函数比结构化程序设计语言的函数功能更加丰富。可以这么理解,js语言的函数就是“一等公民”,它可以独立存在。
js定义一个函数会得到如下五项:

1.函数
2.对象:定义函数时,系统也会创建一个对象,该对象是Function类的实例
3.方法:定义函数时,该函数通常会附加给某个对象,作为该对象的方法。在全局下定义是赋给window。
4.变量
5.类:定义函数时,会得到一个和函数同名的类。

定义函数的三种方式:

  • 定义命名函数:
    命名格式如下:
function functionName(parameter){
	statements
}
  • 定义匿名函数
    命名格式如下:
  • function(parameter){
    	statements
    }
    

    注意要在函数体外面加“;”。当通过这种语法格式定义函数之后,实际上就是定义了一个函数对象(即Function实例),接下来就可以将这个对象赋给另一个变量。

  • 使用Function类匿名函数
    命名格式如下:
  • var f=new Function(a1,a2....,b)
    

    其中a1,a2…是一系列的字符串,代表的是Function类构造器的参数,而最后一个字符串参数b是函数的执行体,执行体的各语句以分号隔开。但函数执行体的语句很多时,这种方式会显得十分臃肿,因此这种方式的可读性不好。

    调用函数的三种方式:

    • 直接调用函数
          这种方式最常见,例如:`p.walk();`
    • 用call()方法调用函数
          直接调用简单、易用,但不灵活。有时候调用函数时需要动态地传入一个函数引用,就需要使用call()方法来调用函数。
      其调用格式为:
    函数引用.call(调用者,参数1,参数2.....)
    

    这种方式相当于:

    调用者.函数(参数1,参数2.....)=函数.call(调用者,参数1,参数2.....)
    

    推荐使用这种方式,因为这种方式可以明显的指出调用者是谁。

  • 用apply()方法调用函数
        apply()方法与call()方法的功能基本相似,都可以动态地调用函数。
    区别在于call()调用函数时,必须在括号中详细地列出每个参数;而apply()调用时,需要以数组的形式一次性传入所有参数
    调用格式为:
  • 函数引用.apply(调用者,[参数1,参数2.....])
    
    在同一个script元素中,js允许先调用函数,在定义该函数------这实际上是js的“函数提升”特性。如果将匿名函数赋值给变量,依然会发生函数提升,但此时提升的是被赋值的变量,而不是函数本身。如果变量是全局变量,该匿名函数也是一个全局函数。另外需要注意一点的是,当变量名和函数名同名时,像`var a;function a(){} `时,若变量未赋值,函数覆盖变量;若函数指定了值,变量会覆盖函数。

    定义对象的三种方式:

    • 使用new关键字调用构造器创建对象
      前面提到了在定义函数的时候,系统会创建一个和函数名同名的类,所以可以使用new来创建对象。使用new关键字调用构造器创建对象,这是最接近面向对象语言创建对象的方式
      可以参考如下代码:
    <script>
    function person(name,age){
    	this.name=name;
    	this.age=age;
    }
    var p1=new person();
    </script>
    
  • 使用Object类创建对象
    因为在js中所有的对象都是Object类的子类,因此可以使用如下方式创建对象:
    `var myobj=new Object();`这是一个空对象,因为js是动态语言,因此可以动态地为该对象增加属性和方法
    可以参考如下代码:
  • <script>
    var myobj=new Object();
    myobj.name="lisi";
    myobj.age=23;
    </script>
    
  • 使用json语法创建对象
    利用json创建对象,只需要了解json格式即可:创建对象时,以 { 开头,以 } 结束,每个属性名和属性值之间以 冒号(:)隔开,多个属性定义之间以逗号(,)隔开。但记住:最后一个属性定义后面不能再有逗号(,)。
    可以参考如下代码:
  • <script>
    var p={
    	name="lisi",age=23
    };
    </script>
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值