函数对象的内部方法call(), apply(), bind()

这三个函数都是指向函数本身的,call()和apply()的第一参数都是这个函数要执行的上下文对象,之后的参数是这个函数执行要传的参数,不同的地方时call是以枚举的方式传参,apply是以数组的形式传参,当然也可以传递arguments对象。bind()是把该函数绑定到指定的context上下文执行环境中,简单讲就是把该函数的this对象指向传到bind()中的参数context上,并返回一个函数实例。

简单的写个示例代码我们就可以了然了:

<script>
    function sayHi(name,greeting){
        var name = name||this.name,
        greeting = greeting||this.greeting;
        console.log("Hello "+name+","+greeting);
    }

    var name = "Terry",
    greeting = "how are you?",
    me = {name:"John",
    greeting:"你好!"};

    sayHi.call(this,name,greeting);
    sayHi.call(this);
    sayHi.apply(this,[name,greeting]);

    sayHi.apply(me,[me.name,me.greeting]);
    sayHi.call(me,me.name,me.greeting);
    //bind()会返回函数实例,后面加()直接执行
    sayHi.bind()();
    sayHi.bind(me)();
    </script>

执行结果:

时间: 2024-10-16 00:24:56

函数对象的内部方法call(), apply(), bind()的相关文章

[Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法

js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+1}" 反射获取函数源代码的功能很强大,使用函数对象的toString方法有严重的局限性.toString方法的局限性ECMAScript标准对函数对象的toString方法的返回结果(即该字符串)并没有任何要求.这意味着不同的js引擎将产生不同的字符串,甚至产生的字符串与该函数并不相关. 如果函数

前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)

原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questions.md 最近将持续翻译JavaScript面试题,希望对各位有所帮助. (文章中斜体字部分为译者添加) 目录: Part 1(事件委托/this关键字/原型链/AMD与CommonJS/自执行函数) Part 2 (null与undefined/闭包/foreach与map/匿名函数/代码组织)

轻松搞定this绑定方法 call apply bind

先来看一个例子 var obj = {}; //创建一个对象 obj.name = "James";  //给对象添加一个属性 obj.say = function(){  //给对象添加一个方法     console.log('My name is' + this.name); }; obj.say(); //this指向obj,所以输出"My name is James" var fn = obj.say; fn(); //this指向了window,全局中没

函数的属性和方法, apply和call的区别及bind的使用

==>我的新博客中 http://www.suanliutudousi.com/2017/08/27/%E5%87%BD%E6%95%B0%E7%9A%84%E5%B1%9E%E6%80%A7%E5%92%8C%E6%96%B9%E6%B3%95-apply-%E5%92%8Ccall%E7%9A%84%E5%8C%BA%E5%88%AB%E5%8F%8Abind%E7%9A%84%E4%BD%BF%E7%94%A8/

6 C++ Boost 函数对象

6 C++ Boost 函数对象 目录: 关于bind bind2nd程序 bind与bind2nd,效果一样 bind1st 减法 bind1st 与bind 做减法 bind2nd调用仿函数 bind 不需要ptr_fun适配 std:bind2nd 与 boost:bind 当参数大于2个,std::bind已经没办法了,boost::bind限10个 bind_api[图] bind用于函数 以及 函数指针 bind用于函数对象 bind用于函数对象,(用引用避免函数对象的拷贝) bin

C++中如何定义函数对象

尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象.函数对象(也称“算符”)是重载了“()”操作符的普通类对象.因此从语法上讲,函数对象与普通的函数行为类似. 用函数对象代替函数指针有几个优点,首先,因为对象可以在内部修改而不用改动外部接口,因此设计更灵活,更富有弹性.函数对象也具备有存储先前调用结果的数据成员.在使用普通函数时需要将先前调用的结果存储在全程或者本地静态变量中,但是全程或者本地静态变量有某些我们不愿意看到的缺陷.其次,在函数对象中编译

将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法

public static function objectToArray($d) { if (is_object($d)) { $d = get_object_vars($d); } if (is_array($d)) { return array_map(array(__CLASS__, __FUNCTION__), $d); } else { return $d; } } array_map(array(__CLASS__, __FUNCTION__), $d)解释: 我们可以在PHP手册中

函数对象的apply()和call()方法

每个函数都包含两个非继承而来的方法:apply()和call().这两个方法的用途都是在特定的作用域中调用函数,特定的作用域为this参数指定的对象. apply()和call()真正强大的地方是能够扩充函数赖以运行的作用域.下面来看一个例子: window.color = "red"; var o = {color: "blue"}; function sayColor() { alert(this.color); } sayColor(); // red say

函数对象的call()、apply() 方法区别

函数对象的call().apply() 方法 函数作为对象提供了call(),apply() 方法,他们也可以用来调用函数,这两个方法都接受一个对象作为参数,用来指定本次调用时函数中this的指向: call()方法 call方法使用的语法规则 函数名称.call(obj,arg1,arg2...argN); 参数说明: obj:函数内this要指向的对象, arg1,arg2...argN :参数列表,参数与参数之间使用一个逗号隔开 var lisi = {names:'lisi'}; var