javascript——对象的概念——函数 1 (函数对象的属性和方法)
一、创建函数
函数是一种对象: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 (函数对象的属性和方法)的更多相关文章
- 深入理解javascript函数系列第三篇——属性和方法
× 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...
- javascript——对象的概念——创建对象与销毁对象
一.创建对象 1.创建空对象 方式一: var o ={};o; //Object {} typeof(o); //"object" 方式二: var o=new Object() ...
- javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
1.把方法写在原型中比写在构造函数中消耗的内存更小,因为在内存中一个类的原型只有一个,写在原型中的行为可以被所有实例共享,实例化的时候并不会在实例的内存中再复制一份而写在类中的方法,实例化的时候会在每 ...
- Javascript中的"函数是第一类对象(first-class object)"
本身这句话很好解释,函数有两个主要特点,援引自 陈新 译的<JavaScript模式>: 1.函数是第一类对象: 函数可以在运行时动态创建,还可以在程序执行过程中创建. 函数可以分配变量, ...
- js学习-自定义函数、对象的字面量、json对象学习小结
一.自定义对象的构造: var student=new Object(); //object是顶级对象,使用构造函数的方法创建一个对象,此处的意思是创建了一个学生的空对象 student.name=& ...
- 一篇文章把你带入到JavaScript中的闭包与高级函数
在JavaScript中,函数是一等公民.JavaScript是一门面向对象的编程语言,但是同时也有很多函数式编程的特性,如Lambda表达式,闭包,高阶函数等,函数式编程时一种编程范式. funct ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- js函数的属性和方法
js函数的属性和方法 前面的话 函数是javascript中特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本文是深入理解j ...
- Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- Javascript 面向对象(共有方法,私有方法,特权方法,静态属性和方法,静态类)示例讲解
一,私有属性和方法 私有方法:私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性),但是私有方法是不可以在类的外部被调用. <script> /* * 私有方法:私有方法本身是可 ...
随机推荐
- PAT1023. Have Fun with Numbers (20)
#include <iostream> #include <map> #include <algorithm> using namespace std; strin ...
- (转) Nova是如何统计OpenStack资源
引言 运维的同事常常遇到这么四个问题: Nova 如何统计 OpenStack 计算资源? 为什么 free_ram_mb, free_disk_gb 有时会是负数? 即使 free_ram_mb, ...
- Node.js初接触(一)
本来还在纠结着到底要学哪一种后台语言呢,突然发现node.js很火,既然能被这么多人推崇,自然是有他的优势的.去百度百科看了一眼,或许是我理解能力太差,并没有了解到很多关于node.js的东西,大概就 ...
- UML类图(二)----------类与类之间的关系之关联(聚合与组合)
类与类之间的关系: 在软件系统中,类并不是孤立存在的,类与类之间存在各种关系,对于不同类型的关系,UML提供了不同的表示方式. 1. 关联关系 关联(Association)关系是类与类之 ...
- asp.net 锚点
可以使用锚点,但这里可使用灵活处理 首先获取需要滚动到的位置的id,如,可以设置一个元素(,注:要在form里),另外在form的任意位置设置 代码如下: 注:a标签里不要有内容,在回传的地方调用 代 ...
- Announcing the Release of ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 for VS2012
The NuGet packages for ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 are now live o ...
- Win7 Nginx启动失败 cmd命令失败
Win7 Nginx启动失败 cmd命令失败 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服 ...
- 分布式_理论_08_Consistent Hash(一致性哈希算法)
一.前言 五.参考资料 1.分布式理论(八)—— Consistent Hash(一致性哈希算法)
- Python&&ipython安装注意事项
yum源里没有,需要先安装一个epel-release这个包,它提供的yum源里有,然后在yum install python-pip.ftp://ftp.muug.mb.ca/mirror/cent ...
- 转:STL迭代器失效问题
. 对于关联容器(如map, set, multimap,multiset),删除当前的iterator,仅仅会使当前的iterator失效,只要在erase时,递增当前iterator即可.这是因为 ...