Function的常用属性和方法_function函数作为对象可以访问的属性和调用的方法有哪些-程序员宅基地

技术标签: JavaScript  javascript  

下面是Function的一些常用的属性和方法,希望可以帮助到一些小伙伴。

1、Function的length属性

**全局的Function对象没有自己的属性和方法。**但是,因为它本身也是函数,所以他会通过原型链从Function.prototype上继承部分属性和方法。

Function.length获取函数的形参的个数

// Function类型的length属性 - 获取函数的参数(形参)的个数

function fn1(){
    
    console.log('this is function1');
}

console.log(fn1.length);  // 0  (形参的个数默认为0)



function fn2(a,b,c,d,e){
    
    console.log('this is function2');
}

console.log(fn2.length);   // 5  (可以获取形参的个数)



function fn3(){
    
    console.log('this is function3');
}
fn3(1,2,3,4,5);  // this is function3
console.log(fn3.length); // 0  (不能获取实参的个数)

2、Function的appply()方法

Function的apply)方法用于调用一个函数,并且接收指定的this值,以及一个数组作为参数。其语法结构如下:

func.apply(thisArg, [argsArray])
  • thisArg参数:可选项,在func函数运行时使用的this值。
  • argsAray参数:可选项,一个数组或者类数组对象,其中的数组元素将作为单独的参数传给func函数。也可以使用arguments 对象作为该参数。
  • 返回值:调用该函数的返回结果。

Function提供的apply方法可以把之前普通调用函数的实参换成apply()里面的实参

var numbers =[5,6,2,3,7];/通过apply()方法获取数组中最大值和最小值var max = Math.max.apply(null, numbers);
var min = Math.min.apply(null, numbers);

实例:

// 定义一个函数
function fn(a,b){
    
    console.log('this is ' + a + b);
}

// 调用函数 - 函数的语法内容
fn('function','hello');  // this is functionhello
/*
    apply(thisArg,args)方法 - 调用函数
    * 使用的对象调用方法的语法结构 -> 将函数作为对象使用
    * 参数
      * thisArg - 指定this的值,表示当前调用函数的对象
        * 如果不使用this值,提供默认值为null或undefined
      * args - 数组,用于接受指定函数的实参
    * 与函数调用的区别在于接受的this值
*/

fn.apply(null,['function','张无忌']);  // this is function张无忌
        // null是用来帮this占位的,undefined也可以用来占位,没有区别。null和undefind都表示为空
// Function提供的apply方法可以把之前普通调用函数的实参换成apply()里面的实参

var obj = {
    
    name : '张无忌',
    sayMe : fn  // 表示当前调用的是fn()函数
}



3、Function的call()方法

Function的call()方法用于调用一个函数,并且接收指定的this值作为参数,以及参数列表。其语法结构如下:

func.call(thisArg, arg1, arg2, ...)
  • thisArg参数:在func函数运行时使用的this值。
  • arg1, arg2,…参数:指定的参数列表。
  • 返回值:调用该函数的返回结果。

apply()与call()非常相似,不同之处在于提供参数的方式。

//通过call()方法获取数组中最大值和最小值
var max = Math.max.call(null, 5,6,2,3,7);
var min = Math.min.call(null, 5,6,2,3,7);

实例:

/*
    call(thisArg,arg1,arg2,...)方法 - 用于调用函数
    * 参数
      * thisArg - 用于指定this的值
      * arg1, arg2, ... - 用于接收函数的实参
    * call()与apply()方法区别 - 在于第二个参数上
*/

function fn(){
    
    console.log('this is function');
}
fn.call(null);  // this is function

4、Function的bind()方法

Function的bind()方法用于创建一个新的函数(称为绑定函数),并且接收指定的this值作为参数,以及参数列表。其语法结构如下:

fun.bind(thisArgl, arg1[, arg2[, ..]l)
  • thisArg参数:当绑定函数被调用时,该参数会作为原函数运行时的this指向。
  • arg1, arg2, …参数:当绑定函数被调用时,这些参数将置于实参之前传递给被绑定的方法。
  • 返回值:返回由指定的this值和初始化参数改造的原函数拷贝。

实例:

var fn = function(v,w){
    
    console.log("this is " + v + w)
}


/*
    bind(thisArg,arg1,argr2, ... )方法 - 用于创建一个新的函数(复制函数)
    * 参数
      * thisArg - 用于指定this的值
      * arg1,arg2, ... - 用于接受 “ 新创建的 ” 函数的实参
        * 新创建的函数的调用时,传递的实参无效
    * 返回值 - 返回新创建的函数
    * 作用 - 实现函数的深复制
*/

fn('mary');  // this is maryundefined 
var f = fn.bind(null,'Jenny');  // 参数的默认值 注意:Jenny这个形参传给了新的对象f,没有传给fn()  Jennny是f的预设参数(定义是给的参数)
f('ming');  // this is Jennyming   “ 新创建的函数的调用时,传递的实参无效 ”   ming是f的参数   所以,f有2个参数

fn();  // this is undefinedundefined



var a = function(){
    
    console.log('this is a');
}

// 把a赋值给b
var b = a;
b();  // this is a

// 重新对a进行赋值
a = function(){
    
    console.log('this is new a');
}

b();  // this is a 
// 即使a被重新赋值了,b的值也没有改变
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_46370867/article/details/109299520

智能推荐

破解百度云盘下载速度-程序员宅基地

文章浏览阅读9.7k次。 坚持把遇到的问题整理出来,供大家参考(企鹅群:263130304),转载注明出处(方便大家找我要源码),对你有帮助请点个赞,如果存在不足之处请留意,不喜勿喷,欢迎大家相互交流学习。——沙果个人小程序作品:1、工具下载:https://download.csdn.net/download/lz_sha/10319209 2、打开谷歌浏览器输入:chrome://ext...

Junit入门到掌握-7-JUnit基础-注解BeforeClass和AfterClass和Ignore_org.junit.before-程序员宅基地

文章浏览阅读1.7k次。前面一篇学习了Before和After这两个注解,这两个注解是作用在每一个@Test标注的方法上,每次运行方法都需要运行一次Before和一次After。这篇来学习一个类似的,就是作用范围变成了Class,叫BeforeClass和AfterClass, 特点就是,每运行一次class文件,只执行一次BeforeClass和AfterClass, 这两个注解标注标注的方法是Java中的静态方法。..._org.junit.before

【数据结构与算法】【算法思想】位图_数据结构与算法 散列表位图-程序员宅基地

文章浏览阅读180次。位图BitMap算法public class BitMap { // Java中char类型占16bit,也即是2个字节 private char[] bytes; private int nbits; //nbits 总容量 public BitMap(int nbits) { this.nbits = nbits; this.bytes = new char[nbits/16+1]; } //长度16 k/16 定位某一段 k%16定位段中某一位 pub_数据结构与算法 散列表位图

负载均衡----实现配置篇(Nginx)_panginx-程序员宅基地

文章浏览阅读158次。还是图比较清晰,以下我都用别名称呼:  PA : 负载均衡服务器/WEB入口服务器/www.mydomain.com  P1 : WEB服务器/分身1/192.168.2.3  P2 : WEB服务器/分身2/192.168.2.4  P3 : WEB服务器/分身3/192.168.2.5PS:首先我们学这个的开始之前吧,不懂防火墙的童鞋们,建议你们把PA、P1、P2、P3的防..._panginx

内联元素内放入块级元素会出现什么情况呢?_内联元素可以包含块级元素吗-程序员宅基地

文章浏览阅读865次。我们知道元素可分为块级元素和内联元素,也知道块级元素内既可以嵌套内联元素也可以嵌套块级元素,但是内联元素就只能嵌套内联元素,不可以嵌套块级元素,当然表格下的tr除外,那么如果违反了规定会出现什么样的效果呢?? 代码如下所示<!--内联元素内嵌套块级元素的展示效果--><div> 这是块级元素 <div style="width: 200px..._内联元素可以包含块级元素吗

黑马程序员---Java基础---注册登录猜字小游戏_mvc模式猜数字游戏-程序员宅基地

文章浏览阅读637次。------- android培训、java培训、期待与您交流! ----------最近研究了一个猜字小游戏和大家分享一下:package cn.itcast.game;/* 猜数字小游戏: 1.生成一个1--1000的一个随机数; 2.引导用户开始游戏; 3.接收用户猜的数字; 4.判断:如果比随机数大,提示:高了 如果比随机数_mvc模式猜数字游戏

随便推点

使用脚本控制外部进程-FTP-程序员宅基地

文章浏览阅读150次。介绍。 许多人问我是否可以从Access中控制外部过程。 通过外部进程,我说的是在Access外部运行脚本。 这将包括BAT,CMD和PowerShell脚本,甚至包括使用Windows的FTP.EXE命令行界面的FTP脚本。 这些脚本接口的功能很难加以限制。 但是,尤其是FTP.EXE,可以控制通过Internet向各种FTP站点发送和接收文件的控制。 大多数网站都是使用此界面更新的。 可..._通过脚本控制进程

登录 注册的 Retrofit+RxJava+OKhttp框架_android retrofit+okhttp+rxjava登录-程序员宅基地

文章浏览阅读292次。//布局<?xml version="1.0" encoding="utf-8"?><LinearLayout ="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wi..._android retrofit+okhttp+rxjava登录

【android 串口开发(二) 之 串口读写操作】_android dev串口读写-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏7次。串口的读写操作既然,我们的so已经生成了,那么接下来就是串口的读写操作啦。下面贴出关键类的代码:** * 串口操作类 */public class SerialPortUtil { private String TAG = SerialPortUtil.class.getSimpleName(); private SerialPort mSerialPort; private OutputStream mOutputStream; private InputStr_android dev串口读写

Kinetis Design Studio修改字体_kinetis design studio教程csdn-程序员宅基地

文章浏览阅读611次。修改字体鼠标点击代码区,右键选择Preferences选择好c/c++中的Editor,点击Edit编辑选择适应的字体,字形,字体大小点击确定,再确定就可以了。_kinetis design studio教程csdn

Hibernate和IBatis对比_hirbanate对比ibatis-程序员宅基地

文章浏览阅读336次。项目也做过几个, 使用IBatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单的整理。网上关于这两个框架的比较也很多, 只是自己想把别人的东西拿过来整理一下, IBatis和Hibernate的比较。(非原创)Hibernate VS iBATIS简介Hibernate是当前最流行的O_hirbanate对比ibatis

使用openlivewrite发布的博客,csdn的metaweblog的网址-程序员宅基地

文章浏览阅读735次。csdn的metaweblog的网址 http://write.blog.csdn.NET/xmlrpc/index 其他填写用户名和密码即可 后续准备写一个自己的博客发布客户端_livewrite