首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Javascriptbind详解

先看一下bind是什么。从上面的React代码,可以看出bind执行后是函数,并且每个函数都可以执行调用它。 眼见为实,耳听为虚。...' console.log((function(){}).bind().length); // 0 由此可以得出结论2: 1、调用bind的函数的this指向bind()函数的第一个参数。...最后总结一下 1、bind是Function原型链的Function.prototype的一个属性,它是一个函数,修改this指向,合并参数传递给原函数,返回值是一个新的函数。...3、es5-shim源码模拟实现bind时用Function实现了length。 事实上,平时其实很少需要使用自己实现的投入到生成环境。但面试官通过这个面试题能考察很多知识。...文章的例子和测试代码放在githubbind模拟实现 github。bind模拟实现 预览地址 F12看控制台输出,结合source面板查看效果更佳。

1.7K32
您找到你想要的搜索结果了吗?
是的
没有找到

JScall apply bind的用法

谁调用当前的属性或者方法的,它就是谁 /* 2.1.bind方法作用 修改函数或者方法的this为指定的对象, 并且会返回一个修改之后的新函数给我们 注意点...: bind方法除了可以修改this以外, 还可以传递参数, 只不过参数必须写在this对象的后面 */ //call apply bind修改this的.../*call:修改函数或者方法的this为指定的对象, 并且会立即调用修改之后的函数 注意点: call方法除了可以修改this以外, 还可以传递参数, */.../*apply:修改函数或者方法的this为指定的对象, 并且会立即调用修改之后的函数 注意点: apply方法除了可以修改this以外, 还可以传递参数, 只不过参数必须通过数组的方式传递...console.log(this); } test(10,20); window.test(); let fn=test.bind

2.9K30

JavaScript 至关重要的 Bind

面试官:请你讲讲 js Bind 本文翻译自: http://javascriptissexy.com/javascript-apply-call-and-bind-methods-are-essential-for-javascript-professionals...JavaScript 至关重要的 Bind 我们用 Bind() 来实现在指明函 数内部 this 指向的情况下去调用该函数, 换句话说, bind() 允许我们非常简单的在函数或者方法被调用时绑定...(user); Bind 方法允许我们实现函数借用 在 JavaScript , 我们可以传递函数, 返回函数, 借用他们等等, 而 bind() 方法使函数借用变得极其简单...."; } } 接着我们使用 bind() 方法柯里化 greet() 方法. bind() 接收的第一个参数指定了 this 的值: // 在 greet 函数我们可以传递 null, 因为函数并未使用到...所以小结一下, bind() 方法允许我们明确指定对象方法的 this 指向, 我们可以借用, 复制一个方法或者将方法赋值为一个可作为函数执行的变量. 我们以可以借用 bind 实现函数柯里化.

53130

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...、call、bind的区别和主要应用场景 虽然网上有很多关于这方面的博客和文章,但还是决定写一篇自己对这方面知识的理解。...(坑爹了,这好像在让巧媳妇去做无米之炊),不过没关系,call、apply、bind可以帮我们干这件事。...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js要往数组添加元素

1.7K50

jscall、apply、bind那些事

前言 回想起之前的一些面试,几乎每次都会问到一个js关于call、apply、bind的问题,比如… 怎么利用call、apply来求一个数组中最大或者最小值 如何利用call、apply来做继承 apply...(坑爹了,这好像在让巧媳妇去做无米之炊),不过没关系,call、apply、bind可以帮我们干这件事。...// 1 call person.showName.call(animal); // 2 apply person.showName.apply(animal); // 3 bind person.showName.bind...所以其实他们干的事从本质上讲都是一样的动态的改变this上下文,但是多少还是有一些差别的.. call、apply与bind的差别 call和apply改变了函数的this上下文后便执行该函数,而bind...Array.prototype.slice.call(arrayLike); 上面arr便是一个包含arrayLike元素的真正的数组啦( 注意数据结构必须是以数字为下标而且一定要有length属性 ) 数组追加 在js要往数组添加元素

1.6K60

JavaScript call()、apply()、bind() 的用法

在JavaScript ,call、apply 和 bind 是 Function 对象自带的三个方法,这三个方法的主要作用是改变函数调用过程的 this 指向 1 apply Function.apply...person1 = { firstName:"Bill", lastName: "Gates" } person.fullName.call(person1, "Seattle", "USA"); 3 bind...Function.bind(obj[,params...]) bind是ES5 新增的一个方法,它的传参和call类似,也是接收两个参数。...lastName: "Gates" } person.fullName.call(person1, "Seattle", "USA")(); 可以从上面看出,使用方法基本和call一致,只是后面多了(),其实是bind...那为什么要引入bind呢,是因为call和apply会自动执行目标函数,从而无法绑定在事件上,因为事件是我们手动触发的,而bind不会自动执行目标函数。

7661211

std::bind in std::bind 编译失败

上面这块理解比较吃力,简言之,如果传给std::bind()的参数T(在本例,T为std::bind(&Index::status, this, std::placeholders::_1))满足std...(ps:此处所说的std::bind()是Index示例嵌套的那个std::bind()操作)。...其实,截止到此处,错误原因已经定位出来了,这就是因为最外层的std::bind()参数,其有一个参数T(此时T的类型为std::bind(&Index::status, this, std::placeholders...::_1)),因为满足std::is_bind_expression::value == true这个条件,所以在最外层的std::bind(),直接对最里层的std::bind()进行调用,而最里层的...{} auto a = std::bind(f) auto b = std::bind(f, std::placeholders::_1) 在上面两个bind(),第一个支持初始化类型(即a的类型)

68620

理解JavaScript的This,Bind,Call和Apply

this指向的对象可以是基于全局的,在对象上的,或者在构造函数隐式更改的,当然也可以根据Function原型方法的bind,call和apply使用显示更改的。...在这篇文章,你将学习到基于上下文隐式表示的含义,并将学习如何使用bind,call和apply方法来显示确定this的值。...当你使用Node.js,全局上下文就是global。...当你想使用事件来获取嵌套类的属性时,bind可能有用。比如,你写一个简单的游戏,你可能需要在一个类中分离用户接口和I/O,然后游戏的逻辑和状态是在另一个类。...由于游戏逻辑需要用户输入,比如按键或点击事件,你可能想要bind事件去获取游戏逻辑类的this的值。

34740

JSbind、apply、call的理解

概要 call、apply、bind 都是用来修改函数的this, 传参时,call是一个个传参,apply是数组形式传参,call和apply立即执行并且返回值是你调用的方法的返回值,若该方法没有返回值...bind是改变this后返回一个新的函数,他不会立即执行。 这三个方法不会改变原方法的this的指向。 Bind 复制原方法传入新的this指向后生成新方法,参数可传多个。...console.info(this.name + "和" + name + "一块玩"); } }; let b = { name: "小红" }; a.play("小刚"); a.play.bind..." }; a.play("小刚", "小李"); a.play.apply(b, ["小刚", "小李"]); 显示 小明和小刚、小李一块玩 小红和小刚、小李一块玩 结论: call、apply、bind...是Function.prototype下的方法,作用是执行一下目标函数,执行时顺便把目标函数的this改一下,然后把结果输出,执行后,不会影响原函数的this!

93910

jQueryon()、bind()、live()、delegate()之间的区别

jQuery的.on()、.bind()、.live()和.delegate()之间的区别并非总是那么明显的,然而,如果我们对所有的不同之处都有清晰的理解的话,那么这将会有助于我们编写出更加简洁的代码,...在操纵DOM的语境,document是根节点。 现在我们可以较容易地说明.on()、.bind()、.live()和.delegate()的不同之处了。...接下来就详细说下几者之间的区别: 1 .bind() .bind()是直接绑定在元素上,也很好的解决了浏览器在事件处理的兼容问题。...另外,.click(), .hover()...这些非常方便的事件绑定,都是bind的一种简化处理方式。...因为都要到达document 因为所有的selector/event都被绑定到document, 所以当我们使用matchSelector方法来选出那个事件被调用时,会非常慢 当发生事件的元素在你的DOM树很深的时候

1.2K30
领券