`

关于js中 function中的length属性和call,apply方法

阅读更多
其实js中function自身的属性和方法还是比较多的,比如打开console它会给你一大堆的提示
         
    
这里重点只说说length属性和call和apply(important),举个例子先:
 function fn1(){
       console.log('fn1');
    }
   
    function fn2(a,b){
      console.log(a+b);
    }
   
    function fn3(a,b,c,d){
     fn2.call(this,a,b)+fn2.call(this,c,d);
    }
 
length属性的作用:显示方法参数的期望参数个数

 
call和apply在参考手册中是这样说的
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数
thisObj
可选项。将被用作当前对象的对象。

arg1, arg2,  , argN
可选项。将被传递方法参数序列。

说明
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
 
1.apply方法作用跟call相同只是call方法第二个参数传进来的是参数序列,而apply传进来的是一个参数数组
 
引用别人的一段代码:
<input type="text" id="myText"   value="input text">
<script>
    function Obj(){this.value="对象!";}
    var value="global 变量";
    function Fun1(){alert(this.value);}

    window.Fun1();   //global 变量
    Fun1.call(window);  //global 变量
    Fun1.call(document.getElementById('myText'));  //input text
    Fun1.call(new Obj());   //对象!
</script>
 
我们发现apply()和call()的真正用武之地是能够扩充函数赖以运行的作用域,这是它的第一个用途,改变this的指向。
2.大部分浏览器都内置了Function.prototype.bind,用来指定函数内部的this指向,即使没有原生的Function.prototype.bind实现,我们来模拟一个,
Function.prototype.bind = function(context){
  var self = this;
   return function(){
       return self.apply(context,arguments);
   }
};
 例子:
 
var obj = {
    name:'objName'
};
var func = function(){
    console.log(this.name); //输出objName
}.bind(obj);
 3.借用其他对象方法
  借用方法的第一种场景是"借用构造函数",通过这种技术,可以实现一些类似继承的效果:
var sup = function(name){
   this.name = name;
};

var sub = function(){
    sup.apply(this,arguments[0]);
};

sub.prototype.getName = function(){
    return this.name;
};

var s = new sub('Dave');
console.log(s.getName());  //输出Dave
 
总结:
1、每个函数都包含两个非继承而来的方法:apply()和call()。 
2、他们的用途相同,都是在特定的作用域中调用函数,主要3种用途。 
3、接收参数方面不同,apply()接收两个参数,一个是函数运行的作用域(this),另一个是参数数组。

  • 大小: 14.8 KB
  • 大小: 4.8 KB
1
2
分享到:
评论

相关推荐

    关于Javascript中call与apply的进一步探讨

    在JavaScript中,`call`和`apply`是两个非常重要的方法,它们都用于改变函数调用时的上下文(即`this`的值),并且可以灵活地传递参数。本篇文章将深入探讨这两个方法的用法、区别以及实际应用场景。 `call`方法...

    理解JavaScript的caller callee call apply

    `call`和`apply`是`Function.prototype`上的两个方法,它们允许开发者以不同的上下文(`this`值)调用函数,并提供参数。这两个方法的主要区别在于参数的传递方式: 1. **`call`方法**:接收一个`this`值作为第一个...

    详解js中的apply与call的用法.docx

    在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文,即改变`this`的指向。这两个方法的主要区别在于它们处理参数的方式。 `call`方法允许你指定一个对象来替代原...

    JsCall方法详解(js的继承).pdf

    总的来说,`call`和`apply`是JavaScript中实现动态上下文和继承的重要工具,它们提供了灵活的方式来操作函数调用,尤其是在处理对象和类的结构时。尽管JavaScript有多种实现继承的方式,如原型链、类式继承等,但`...

    JS中用法apply方法通过不同数量的参数调用函数的方法_.docx

    JavaScript中的`apply()`方法是函数调用的一种方式,它允许我们改变函数内部`this`的指向,并且可以灵活处理参数传递...同时,与`call()`和`bind()`方法一起,它们构成了JavaScript中控制`this`和参数传递的重要工具。

    JavaScript中的apply和call函数详解

    首先,我们需要明白在JavaScript中,函数也是对象,所以它们可以拥有自己的方法,比如toString()、call()和apply()。 在JavaScript中,函数和方法的区别通常取决于函数是如何被调用的。如果函数是作为一个独立的...

    JS中call/apply、arguments、undefined/null方法详解

    在JavaScript中,`call`和`apply`是两种非常重要的函数调用方式,它们都用于改变函数执行时的上下文环境,即`this`的指向。这两种方法的主要区别在于传递参数的方式。 `call`方法的语法是:`call([thisObj[, arg1[,...

    JavaScript中apply与call的用法意义及区别说明

    总结来说,apply和call是JavaScript中非常实用的方法,用于改变函数的执行上下文,使得函数能够借用其他对象的方法。它们在参数传递方式上的区别,使得开发者可以根据具体场景选择最合适的调用方式。而函数的length...

    深化浅析JavaScript中的Function类型_.docx

    综上所述,JavaScript中的Function类型具有丰富的特性和用途,理解和掌握这些概念对于编写高效、安全的JavaScript代码至关重要。在实际编程中,应灵活运用各种函数定义方式、内部属性以及特性,以实现更复杂的逻辑和...

    Javascript中apply、call、bind的巧妙使用

    最后,当遇到JavaScript中的类数组对象时(如NodeList对象或者arguments对象),这些对象虽然具有length属性,但却不是真正的数组,因此它们没有Array对象的所有方法。我们可以通过apply方法结合slice方法将类数组...

    js中Function引用类型常见有用的方法和属性详解

    本文将深入探讨Function类型的一些常见且实用的方法和属性。 首先,Function类型在JavaScript中是一种引用类型,这意味着函数是对象,可以被赋值给变量、作为参数传递或者作为其他函数的返回值。这种特性使得...

    javascript利用apply和arguments复用方法

    `apply`是JavaScript中Function对象的一个方法,它可以改变函数调用的上下文(即`this`的值)并接收一个数组或者类数组对象作为参数。语法如下: ```javascript function.apply(thisArg, [argsArray]) ``` - `...

    js代码-手写call apply

    在JavaScript中,`call`和`apply`是两种非常重要的函数调用方法,它们都用于改变函数执行时的上下文(即`this`值),同时允许我们传递参数。本篇文章将详细探讨`call`和`apply`的工作原理,并通过手写实现这两个方法...

    js面向对象简单编程.pdf

    在JavaScript中,数组也是对象的一种,可以使用各种方法和属性来操作数组。 文档进一步讲解了如何定义对象字面量以及如何定义包含函数的对象,这体现了对象在JavaScript中的灵活用法。例如,可以定义一个名为`user`...

    javascript中如何实现封装,继承和多态,并有详细的示例.ppt

    此外,`apply`和`call`方法在JavaScript中用于改变函数的调用上下文(`this`的指向),从而实现多态效果。例如: ```javascript function sayHello() { console.log('Hello, ' + this.name); } var person = {...

    javascript下arguments,caller,callee,call,apply示例及理解

    JavaScript中arguments、caller、callee、call和apply是与函数相关的几个重要概念和对象。它们为JavaScript的函数提供了非常灵活的功能,特别是在处理函数参数和调用上下文方面。接下来,将对这些概念逐一进行详细...

    JavaScript中apply方法的应用技巧小结

    在JavaScript中,`apply`方法是函数对象的一个内置属性,它允许我们改变函数调用时的上下文(即`this`的值)以及传递参数的方式。`apply`接收两个参数:第一个参数是希望作为`this`值的对象,第二个参数是一个数组或...

    JS call()及apply()方法使用实例汇总

    JavaScript中的call()和apply()方法是函数对象的两个非常关键的方法,它们的主要作用在于改变函数执行时的上下文,即this的指向,并允许我们在不同环境中调用同一个函数。这两个方法在实际开发中有着广泛的应用,...

    【JavaScript语言精粹系列】apply的用法

    JavaScript语言精粹系列中,`apply`是一个非常重要的方法,它属于函数对象,是JavaScript中的一个核心特性。本文将深入探讨`apply`的用法及其在实际编程中的应用。 `apply`方法允许我们调用一个函数,并指定一个...

Global site tag (gtag.js) - Google Analytics