函数深入理解---函数的属性length和方法call 和apply

函数同样有两个非常好用的属性:length 和prototype

function fn1(){

}

function fn2(num1,num2){

}

function fn3(num1){

}

//函数的length就表示该函数所期望的参数值
alert(fn1.length) // 0
alert(fn2.length) // 2
alert(fn3.length) // 1

call 和apply方法查可以通过函数名称来调用函数

对于apply而言
有两个参数,第一个是调用的上下文,第二个是参数数组,可以直接把
arguments传递进去

对于call而言
第一个参数是上下文对象,后面的参数是不同函数参数

function sum(num1,num2){
    return num1 + num2;
}

function callSum1(num1,num2){
    //使用sum 这个函数来完成一次调用,调用的参数就是callSum1这个函数的参数
    //apply的第二个参数表示一组参数的数组
    return sum,apply(this,arguments)
}

function callSum2(num1,num2){
    // 关键就是第二个参数是数组
    return sum.apply(this,[num1,num2]);
}

alert(callSum1(12,22));
alert(callSum2(22,32));

function callSum3(num1,num2){
    //call是通过参数列表来完成传递,其它和apply没有任何区别
    return sum.call(this,num1,num2);
}

alert(callSum3(12,22));

/*
    当需要创建一个类的时候,设置类的属性和方法需要通过this关键字来引用
    但是特别注意:this关键字在调用时会根据不同的调用对象变得不同
*/

var color = ‘red‘;

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

//创建了一个类,有一个color的属性和一个show的方法

function circle(color){
    this.color = color;
}

var c= new Circle(‘yellow‘);

showColor.call(this) //使用上下文来调用showColor,结果是red
showColor.call(c); //上下文对象是以,结果就是yellow

/*
    通过以上发现,使用call和apply之后,对象中可以不需要定义方法了
    这就是call和apply的一种运用
*/
时间: 2024-10-07 04:15:44

函数深入理解---函数的属性length和方法call 和apply的相关文章

函数深入理解---函数的内部属性arguments和this

arguments function say(num){ /* 在函数对象中有一个属性叫做arguments,通过这个属性可以获取相应的参数值,这个属性 是一个数组,其实就是传递进来的参数 */ console.log(arguments.length); for(var i=0;i<arguments.length;i++){ console.log(arguments[i]); } console.log(num); } /* 在arguments这个对象中有一个callee的方法,argu

函数深入理解---函数的值传递

函数的值传递 //由于函数是对象,所以可以直接把函数参数传递进来 function callFun(fun,arg){ //第一个参数就是函数对象 return fun(arg); } function sum(num){ return num +100; } function say(str){ console.log('hi' + str); } //var say = x; //调用了say函数 callFun(say,'leo'); //调用了sum函数 console.log(call

函数深入理解---函数的定义方式

函数的定义方式 //第一种定义方式 function fn1(){ alert('fn1'); } /*函数就是一个非常特殊的对象,是一个Function类的实例, 其实在内存中存储的操作是通过一个键值对来存储的 */ console.log(typeof fn1); //由于函数是一个对象,所以可以通过如下方式定义 //以下是通过函数的拷贝来完成赋值,两个引用并没有指向同一个对象 var fn2 = fn1; //两个的值虽然相等,但是指向的是不同的空间 fn2(); fn1 = functi

Makefile函数eval理解

Makefile函数eval理解 函数"eval"是一个比较特殊的函数.使用它我们可以在我们的Makefile中构造一个可变的规则结构关系(依赖关系链),其中可以使用其它变量和函数.函数"eval"对它的参数进行展开,展开的结果作为Makefile的一部分,make可以对展开内容进行语法解析.展开的结果可以包含一个新变量.目标.隐含规则或者是明确规则等.也就是说此函数的功能主要是:根据其参数的关系.结构,对它们进行替换展开. 函数"eval"的返

函数的属性length、prototype和方法call()、apply()

length指的是该函数所期望传递进来的参数个数. function fun0(){}             //0 function fun1(num1){}         //1 function fun2(num1,num2){}    //2 //prototype function MyObject(name, size)  { this.name = name; this.size = size; } var obj = new MyObject(); MyObject.prot

javascript构造函数.prototype原型理解 函数.call() 方法克隆的理解

直接创建object对象 var stu = new Object(); 或 var stu = {}; stu.name="zhangsan"; stu.age = "18"; stu.fun = function(){ alert("我叫张三"); } 你也可以用讲stu当作一个模块,模块里面有多个对象,如下实例为一个简单的购物车系统的模块!var shoppingCar = {} shoppingCar.carInfo = function

Generator函数的理解和使用

原文:https://blog.csdn.net/ganyingxie123456/article/details/78152770 Generator函数的理解和使用 Generator 函数是 ES6 提供的一种异步编程解决方案. 一.异步编程 1.所谓"异步",简单说就是一个任务分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段. 2.异步编程方式: (1)回调函数 (2)事件监听 (3)发布/订阅者 (4)Promise对象 3.所谓回调函数,就是把

(三)基本概念之理解函数

本章内容 语法 数据类型 流控制语句 理解函数 关键词:arguments 重载 一.语法 严格模式 严格模式是为JavaScript定义了一种不同的解析与执行模型.在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误.要在整个脚本中启用严格模式,可在顶部添加如下代码(编译指示): 'use strict'; 在函数内部的上方包含这条编译指示,也可以指定函数在严格模式下执行: function doSomething(){ 'use strict

对JS中函数的理解

函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦