一、创建函数

函数是一种对象:Function类 是对象,可以通过 Function 实例化一个函数,不过最多的还是利用 function 来创建函数。

方式一:利用 Function类 来实例化函数:

 var people=new Function("name","sex","if (sex=='男')  return  name+'先生: 您好!';  else   return name+'女士: 您好!';");
people('小强','男') //"小强先生: 您好!"

Function类 实例化函数

语法格式:var function_name = new function(arg1, arg2, ..., argN, function_body)

  • 参数中前 n 个为函数的形参,最后一个为函数的函数体(执行部分);

方式二:利用 function 来创建函数,语法如下:

var a= function (参数1,参数2……){}

或  function a(参数1,参数2……){}

例:

     function people(name,sex)
{
if (sex=='男')
return name+'先生: 您好!';
else
return name+'女士: 您好!';
}

创建方法

注意以下问题:

  • 当设定参数而忘记调用参数时,javascript引擎将自动传递一个 undefined 的参数;
  • 当传递的参数超出设定参数个数时,多余的部分将自动忽略;
  • javascript通过一个 arguments 对象自动管理函数接受的参数,该对象类似于一个数组。

由以上两种方式可以看出,创建的函数最终是一样的,务必记住一点函数是一种对象,其是引用类型。

二、javascript中的变量

javascript中的变量分为局部变量和全局变量。

1、局部变量: 在函数内部以 var 声明的变量,只能在函数内访问,函数运行完毕会删除局部变量;

2、全局变量:

  • 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
  • 在函数内部未使用var 声明的变量也是全局变量,如 carname="Volvo";但是这种全局变量只有在执行所在函数后才能在全局范围内访问。

三、函数相关的属性:

1、arguments:访问函数的输入参数,由脚本解释器自动创建,具有length属性,类似于数组,可以用数组的方法访问每个参数。

例1:

     function people(name,sex)
{ if (sex=='男')
return name+'先生: 您好!一共有 '+arguments.length+' 个参数';
else
return name+'女士: 您好!一共有 '+arguments.length+' 个参数';
};
people('小强','男'); //"小强先生: 您好!一共有 2 个参数"
people('小丽','女'); //"小丽女士: 您好!一共有 2 个参数"

arguments使用例子 1

例2:

     function people(name,sex)
{ if (sex=='男')
return arguments[0]+'先生: 您好!一共有 '+arguments.length+' 个参数';
else
return arguments[0]+'女士: 您好!一共有 '+arguments.length+' 个参数';
};
people('小强','男'); //"小强先生: 您好!一共有 2 个参数"
people('小丽','女'); //"小丽女士: 您好!一共有 2 个参数"

arguments使用例子 2

例3:

结果如图:

         function sum(v1,v2)
{
document.writeln('////////////////////////////////////////////////////////////////////////');
document.writeln('<br>调用参数:<br>');
document.writeln('参数有 '+arguments.length+' 个:<br/>');
var s=0;
for(var i=0;i<arguments.length;i++)
{
document.writeln('参数 '+i+':'+arguments[i]+'<br/>');
}
for(var i=0;i<arguments.length;i++)
{
s=s+arguments[i];
}
document.writeln('参数的和为: '+s +'<br/>');
document.writeln('////////////////////////////////////////////////////////////////////////');
};

arguments使用例子 3

由例子可以看出 arguments 对象操作的只是实参,而不是形参,因此我们实际上也可以不必设置形参,当然为规范性还是指定的好。

2、callee:arguments的属性,表正在执行的函数对象。

例如:

     function sum(n)
{
if(n<=0)
return 0;
else
return n+arguments.callee(n-1);
}
sum(2); //
sum(100); //

arguments.callee使用例子

3、calleer:函数对象的属性,表函数对象的父函数对象。function foo1(v1)

例:

结果:

       function foo1(v1)
{foo2(v1,v1*2);}
function foo2(v1,v2)
{foo3(v1,v2,v2*2);}
function foo3(v1,v2,v3)
{
  var foo=arguments.callee;
  while(foo&&(foo!=window))
  {
    document.writeln('<br>调用参数:<br>');
    var args=foo.arguments;
    argn=args.length;
document.write('参数有 '+argn+' 个:\n');
    for(var i=0;i<argn;i++)
    {
      document.writeln('args['+i+']:'+args[i]+'<br>');
    }
    foo=foo.caller;
  }
};
document.writeln('////////////////////////////////////////////////////////////////////////');

arguments.caller应用实例

4、apply 和 call 方法:将函数绑定到其他对象上执行。

apply:参数将以数组的形式传入;

call:参数以逗号隔开,作为一个列表传入。

     function classA()
{
this.name='classA';
this.methodA=function(msg){return this.name+':'+msg};
}
function classB()
{
this.name='classB';
this.methodB=function(msg){return this.name+':'+msg};
}
var objA=new classA();
var objB=new classB();
objA.methodA('调用methodA'); //"classA:调用methodA"
objA.methodA.apply(objB,['调用methodA']); //"classB:调用methodA"
objB.methodB.call(objA,['调用methodB']); //"classA:调用methodB"

apply 与 call 的用法

5、length :返回形参个数,指的是函数定义时期望的参数个数,与实际调用时的参数(实参)个数无关。

6、valueOf()、 toString() :返回函数的代码

7、this

  • 在构造器函数中表新创建的对象的实例;
  • 对象的方法被调用时,指调用该方法的对象实例;
  • 当函数作为一个方法而不是一个对象的方法时,表示windows对象;
  • 在函数体外,表示windows对象;

javascript——对象的概念——函数 1 (函数对象的属性和方法)的更多相关文章

  1. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  2. javascript——对象的概念——创建对象与销毁对象

    一.创建对象 1.创建空对象 方式一: var o ={};o; //Object {} typeof(o); //"object" 方式二: var o=new Object() ...

  3. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别

    1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每 ...

  4. Javascript中的"函数是第一类对象(first-class object)"

    本身这句话很好解释,函数有两个主要特点,援引自 陈新 译的<JavaScript模式>: 1.函数是第一类对象: 函数可以在运行时动态创建,还可以在程序执行过程中创建. 函数可以分配变量, ...

  5. js学习-自定义函数、对象的字面量、json对象学习小结

    一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...

  6. 一篇文章把你带入到JavaScript中的闭包与高级函数

    在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...

  7. JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等

    一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...

  8. js函数的属性和方法

    js函数的属性和方法 前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解j ...

  9. Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解

    一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用. <script> /* * 私有方法:私有方法本身是可 ...

随机推荐

  1. DelphiXE_画图

    1.基本 DelphiXE FireMonkey 如何画图 http://www.delphitop.com/html/FireMonkey/2647.html 2. 3.

  2. review14

    日期的格式化 Formatter类的format方法: format(格式化模式, 日期列表) 按着“格式化模式”返回“日期列表”中所列各个日期中所含数据(年,月,日,小时等数据)的字符串表示.“格式 ...

  3. Ubuntu 中查看内核版本和系统版本的四个命令

    一.查看内核版本:cat /proc/version 二.查看内核版本:uname -a 三.查看系统版本:lsb_release -a 四.查看发行版类型:cat /etc/issue

  4. Wannafly挑战赛4 B,小AA的数列

    题意:求子区间异或和,要求区间长度在l到r之间,并且为偶数 题解:对于每一位算贡献,可以分奇偶来记录,计算的时候只加上奇偶性相同的就保证了为偶数,从大于l的点开始每次++,从大于r的点每次--,记录二 ...

  5. 改善Chrome在Windows下的中文字体效果

    方法一:摘自卡饭论坛 chrome://flags/#disable-direct-write 启用 chrome://flags/#num-raster-threads 改为 1 chrome:// ...

  6. hdu 5237 Base64(模拟)

    Base64 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...

  7. asp.net上传文件大小限制

    <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedConte ...

  8. Ubuntu下使用tmux实现分屏,以及tmux快捷键

    最近用到了终端的复用,使用了tmux,写一下自己的使用和一些快捷键. tmux是指通过一个终端登录远程主机并运行后,在其中可以开启多个控制台的终端复用软件. 来个效果图: 截图我使用的命令是  gno ...

  9. Highcharts中更新series的5种方法

    用Highcharts画图时,经常需要更新所画的图表,最常见的就是改变数据以更新图表.在Highcarts中,数据对应的参数是series.这儿就以图1的柱状图为例,列举如何更新series的5种方法 ...

  10. app-前端性能测试

    前端性能测试,主要分为七个部分: 启动时间.CPU.流量.电量.内存.FPS(每秒钟的帧数).过度渲染 主要测试的内容: 启动时间:主要测试app在启动过程中的耗时情况 CPU:主要测试app在使用过 ...