JavaScript学习笔记(函数基础知识)

it2022-05-05  108

 

Function类

1,每个函数都是Function类型的实例对象,函数名只是指向该实例对象的指针。

2,由于函数名是指向函数对象的指针,所以js中没有类似其他面向对象语言(C#/JAVA)中的重载。如下面代码

function a(num) { return num + 100; }

function a(num1, num2) { return num1 + 200; }; alert(a(100));

前面的函数会被后面的函数覆盖。

3,既然函数是一个对象,那么可以将函数当做值来传递。如下所示

给对象排序

var object1 = { name: '张三', age: 10 }; var object2 = { name: '李四', age: 20 }; var object3 = { name: '王五', age: 5 }; var t = [object1, object2, object3]; t.sort(SortObj('age')); alert(t[0].age+":"+t[1].age+":"+t[2].age); function SortObj(objPropet) { return function (obj1, obj2) { if (obj1[objPropet] > obj2[objPropet]) return 1; else if (obj1[objPropet] <obj2[objPropet]) return -1; else return 0; } }

调用sort方法时需要给其传一个比较函数,给对象进行排序时需要按对象的某个属性进行排序。

定义一个函数(SortObj)它接受一个参数(objPropet),并返回一个按对象属性排序的比较函数

4,函数的内部属性 (argument、this对象,caller属性)

    (1)argument对象除了保存传入函数参数的值还有一个比较重要的属性callee,该属性是一个指针,指向拥有该argument对象的函数。如阶乘的例子

function factor(num) { if (num <= 1) return 1; else { return num * arguments.callee(num - 1); } }

(2)this对象就是引用函数,据已执行的环境对象

(3)caller属性保存着调用当前函数的函数的引用     

function a() { b(); } function b() { alert(arguments.callee.caller); } a();//返回的是a()函数的源代码

5,每个函数都有length和prototype属性

     1)length属性表示函数希望接收的参数的个数。

     2)prototype属性是保存函数所有实例方法的真正所在。

6,每个函数都包含两个非继承而来的方法apply()、call()和bind方法

     1)apply()、call()的用途都是在特定的作用域中调用函数。

      apply()方法接受两个参数一个是指定运行函数的作用域,一个是函数参数数组argument,参数array也行

      call()方法第一个参数是指定运行函数的作用域,其他参数按函数参数逐个传递

function sum(s1, s2) {alert(this); return s1 + s2; } alert(sum.call(this, 1, 2));第一次弹出的是window对象,第二次是3

      2)bind()方法会创建一个函数的实例,其this值会被绑定到传给bind函数的值(IE9+,Firefox4+,Chrome,Opera 12+,Safari 5.1+)

var obj1 = { name: '张三', age: 10 }; function a() { alert(this.name); } var p = a.bind(obj1); p();//弹出张三

  7,函数继承的toLocaleString()、toString(),valueOf()方法返回的是函数代码,调试的时候有用。这几个方法的区别          

function sum(s1, s2) { this.bb(); return s1 + s2; }

sum = [1,new Date(),3]; alert(sum.toLocaleString()); alert(sum.toString()); alert(sum.valueOf());

         

 

 

 

转载于:https://www.cnblogs.com/wt-yy86/p/3561070.html

相关资源:javascript学习笔记之函数定义

最新回复(0)