JavaScript函数的其他属性和方法

一、length属性:

    length 属性表示函数希望接收的命名参数的个数。

function box(name, age) {
    alert(name + age);
}
box("包包",20);
alert(box.length);         //2   即该函数中参数的个数

二、prototype属性

  prototype 下有两个方法:apply()和 call(),每个函数都包含这两个非继承而来的方法。

   这两个方法的用途都在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。

  

  1、apply()方法

function box(num1,num2){
        return num1+num2;
    }
    alert(box(10,10));  //结果是20

    function sayBox(num1, num2) {
        return box.apply(this, [num1, num2]);             //this 表示作用域,这里是 window  []表示 box 所需要的参数
    }
    alert(sayBox(10,10));//结果也是20    该函数含义是冒充box函数执行  因为sayBox函数没有相加的功能,需要冒充box函数来执行,这样sayBox就有了相加的功能

如果box函数的参数过多的话,还可以使用下面这种方式

  function box(num1,num2){
        return num1+num2;
    }
    alert(box(10,10));  //结果是20

    function sayBox(num1, num2) {
        return box.apply(this,arguments);            //arguments 对象表示 box 所需要的参数
    }
    alert(sayBox(10,10));//结果也是20    该函数含义是冒充box函数执行  因为sayBox函数没有相加的功能,需要冒充box函数来执行,这样sayBox就有了相加的功能了
    alert(sayBox(10,90,90,20));//这里不管你传入了多少个参数,box函数只有两个参数的话,那么这里传入有效的参数是前面两个

  2、call()方法

  function box(num1, num2) {
        return num1 + num2;
    }
    alert(box(10,10));     //20

    function callBox(num1, num2) {
        return box.call(this, num1, num2);         //和 apply 区别在于后面的传参
    }
    alert(callBox(10,10));    //20

call()方法于 apply()方法相同,他们的区别仅仅在于接收参数的方式不同。对于 call()方法而言,第一个参数是作用域,没有变化,变化只是其余的参数都是直接传递给函数的。

三、apply()和 call()方法其他用武之地

  事实上,传递参数并不是 apply()和 call()方法真正的用武之地;它们经常使用的地方是能够扩展函数赖以运行的作用域。

  var color = ‘红色的‘; //或者 window.color = ‘红色的‘;也行
    var box = {
        color : ‘蓝色的‘
    };

    function sayColor() {
        alert(this.color);
    }

    sayColor();                     //作用域在 window
    sayColor.call(this);             //作用域在 window
    sayColor.call(window);           //作用域在 window
    sayColor.call(box);             //作用域在 box,对象冒充

  我们可以发现当我们使用 call(box)方法的时候,sayColor()方法的运行环境已经变成了 box 对象里了。
  使用 call()或者 apply()来扩充作用域的最大好处,就是对象不需要与方法发生任何耦合关系(耦合,就是互相关联的意思,扩展和维护会发生连锁反应)。

  也就是说,box 对象和sayColor()方法之间不会有多余的关联操作,比如 box.sayColor = sayColor;

时间: 2024-12-28 15:48:31

JavaScript函数的其他属性和方法的相关文章

JavaScript函数的多种定义方法

缘起 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对 javascript语言特性更进一步的深入理解,那么他有几种写法呢? ( function(){…} )() 或者 ( function (){…} () ) 首先要明白两个知识点 js中函数是引用类型: 函数一般执行方式:函数名+(): 下面的例子帮你理解引用类型 var a = function(x,y){ console.log(x + y

JS函数的其他属性和方法

---------------caller , apply , call , bind ECMAScript 5 为函数新增了一个属性caller. caller中保存着调用当前函数的函数的引用,如果是在全局作用域中调用当前函数,则caller的值为null function outer(){ inner(); } function inner(){ console.log(inner.caller); } outer(); 上面的代码执行后会在控制台打印出outer函数的源代码.因为outer

JavaScript 函数定义方法

JavaScript 函数定义方法. 函数声明 在之前的教程中,你已经了解了函数声明的语法 : function functionName(parameters) { 执行的代码 } 函数声明后不会立即执行,会在我们需要的时候调用到. function myFunction(a, b) { return a * b; } 分号是用来分隔可执行JavaScript语句. 由于函数声明不是一个可执行语句,所以不以分号结束. 函数表达式 JavaScript 函数可以通过一个表达式定义. 函数表达式可

JavaScript函数的调用模式有哪些?

函数是JavaScript 世界里的第一公民,换句话来说,就是我们如果可以精通 JavaScript 函数的使用,那么对JavaScript 的运用可以更游刃有余了.熟悉 JavaScript 的人应该都知道,同样的函数,以不同的方式调用的话,受影响最大的应该是  this  .下面我们来说说 JavaScript 函数的各种调用模式,希望对大家 学习javascript有所帮助. 一.普通函数的调用模式 所谓普通函数的调用模式,也是JavaScript 函数的最简单的一种调用模式,直接就是函数

JavaScript函数认识,Js中的常见函数

JavaScript函数: 也称为方法,用来存储一块代码,需要的时候调用. 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块. 函数需要包含四要素:返回类型,函数名,参数列表,函数体 拓展:强类型语言的函数 public int Sun(int a,int b){ return = a+b; } return返回,Sun函数名,int a,int b,参数列表,int 整型. 没有返回值的函数: public void Sun(int a,int b){ } Sun(1,2); 这样的

JavaScript函数及其prototype

一.定义 函数可以通过声明定义,也可以是一个表达式. (1)函数声明式: 分号是用来分隔可执行JavaScript语句,由于函数声明不是一个可执行语句,所以不以分号结束. function a(){ console.log('bbb'); } (2)函数表达式: 函数表达式以分号结尾,因为它是一个执行语句. var a = function(){ console.log('aaa'); } (3)声明式变体: var a = function a(){ console.log('bbb'); }

JavaScript函数的各种调用模式

函数是JavaScript世界里的第一公民,换句话来说,就是我们如果可以精通JavaScript函数的使用,那么对JavaScript的运用可以更游刃有余了.熟悉JavaScript的人应该都知道,同样的函数,以不同的方式调用的话,受影响最大的应该是  this .下面我们来说说JavaScript函数的各种调用模式. 一.普通函数的调用模式 所谓普通函数的调用模式,也是JavaScript函数的最简单的一种调用模式,直接就是函数名后接一个  ()  实现调用,看下面代码: function f

6 JavaScript函数&内置构造&函数提升&函数对象&箭头函数&函数参数&参数的值传递与对象传递

JavaScript函数:使用关键字function定义,也可以使用内置的JavaScript函数构造器定义 匿名函数: 函数表达式可以存储在变量中,并且该变量也可以作为函数使用. 实际上是匿名函数. <body> <p>函数存储在变量后,变量可作为函数使用:</p> <p id="demo"></p> <script> var x = function(a,b){return a+b; }; document.g

javascript中定义声明函数的四种方法

javascript中定义声明函数的四种方法 :http://blog.163.com/zzf_fly/blog/static/209589158201286104927248/ 方法一:function functionName([parameters]){functionBody}; 方法二:将一个未命名的函数function赋给一个指定变量(var):var add=function(a, b){} 方法三:使用new运算符声明函数varName=new Function([param1N