bind,call,apply的区别

function cat(){
}
cat.prototype={
food:"fish",
say: function(){
alert("I love "+this.food);
}
}

var blackCat = new cat;
blackCat.say();

但是如果我们有一个对象whiteDog = {food:"bone"},我们不想对它重新定义say方法,那么我们可以通过call或apply用blackCat的say方法:blackCat.say.call(whiteDog);

如果我们想以func()的方式调用,就可以使用bind:

var func = cat.prototype.say.bind(whiteDog);

func();//即可以达到和call,apply同样效果

时间: 2024-10-19 04:35:56

bind,call,apply的区别的相关文章

bind、call、apply的区别与实现

1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数. var obj = {}; function test() { console.log(this === obj); } test(); //false var testObj =

bind、call、apply的区别与实现原理

1.简单说一下bind.call.apply的区别 三者都是用于改变函数体内this的指向,但是bind与apply和call的最大的区别是:bind不会立即调用,而是返回一个新函数,称为绑定函数,其内的this指向为创建它时传入bind的第一个参数,而传入bind的第二个及以后的参数作为原函数的参数来调用原函数. var obj = {}; function test() { console.log(this === obj); } test(); //false var testObj =

call,apply,bind的用法以及区别

1.call.apply.bind的作用是改变函数运行时this的指向 方法调用模式: 当一个函数被保存为对象的一个方法时,如果调用表达式包含一个提取属性的动作,那么它就是被当做一个方法来调用,此时的this被绑定到这个对象. var a = 1 var obj1 = { a:2, fn:function(){ console.log(this.a) } } obj1.fn()//2 此时的this是指obj1这个对象,obj1.fn()实际上是obj1.fn.call(obj1),事实上谁调用

JavaScript之bind,call,apply

参考: http://rangercyh.blog.51cto.com/1444712/1615809 function foo(a,b) { this.x = this.x + a + b; } //case 1: var obj = {x:3}; foo.apply(obj,[1,2]); //obj <==> {x:6} //case 2: var obj = {x:3}; foo.call(obj, 1, 2); //obj <==> {x:6} //case 3: var

javascript 中的call 和apply的区别

一直对call 和apply很模糊,今天终于搞懂了,分享出来给大家. apply call bind方法 var ZS = { name:"张三", sex : "男", age : "25岁", say :function(){ console.log(this.name+","+this.sex+",今年"+this.age) } } var LS = { name:"李四", se

bind() call() apply()总结

相同: bind() call() apply()三者都是改变this指向的 不同: 1.call()和apply()可以看作是某个对象的方法,通过调用方法的形式,间接的调用函数. bind()就是将某个函数绑定到某个对象上. 2.call()和apply()是立即调用, 而bind()是返回对应的函数便于稍后调用,而不是直接执行函数 详解: call()和apply()第一个参数都是this要指向的对象, call() 第二个参数传入的是参数列表,参数可以是任意类型,当第一个参数为null,u

call和apply的区别

call和apply的区别: 它们各自的定义:   apply:应用某一对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. call:调用一个对象的一个方法,以另一个对象替换当前对象.例如:B.call(A, args1,args2);即A对象调用B对象的方法. 它们的共同之处: 都"可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象". 它们的不同之处: app

jQuery中的bind() live() delegate()之间区别分析

jQuery中的bind() live() delegate()之间区别分析 首先,你得要了解我们的事件冒泡(事件传播)的概念,我先看一张图 1.bind方式 $('a').bind('click',function (){ alert('click'); }) 解析:这种方式最简单,jq扫描文档找出所有的a,让将函数绑定到每个元素的click事件上 2.live方式 $('a').live('click',function (){ alert('click'); }) 解析:jq将函数绑定到$

Bind和Eval的区别详解

原文:Bind和Eval的区别详解 1.简单描述Eval和Bind的区别 绑定表达式 <%# Eval("字段名") %> <%# Bind("字段名") %> 区别 1.eval是只读数据,bind是可更新的. 2.当对次表达式操作时候,必须用Eval 如<%# Eval("字段名").ToString().Trim() %> 2.若GridView中绑定列里面 设置 内容格式 DataFormateStri