bind、apply、call的理解】的更多相关文章

javasctipt中bind,apply,call的相同点是: 1,都是用来改变this的指向; 2,都可以通过后续参数进行传参; 3,第一个参数都是指定this要指向的对象; 不同点: 1,调用方式不同,apply和call的调用方式一致,但是bind方式就不一样了; var xz = { name:'小张', age:20, show: function () { console.log("name: %s; age: %d;",this.name,this.age); } }…
javascript有两种使用频率非常高的三个内置的功能:bind/apply/call.许多技术是基于高点,这些功能实现.这三个功能被用来改变的功能运行环境.从而达到代码复用的目的. 先来所说bind函数, bind,函数通常有两个用途: 1. 创建新函数,指定函数的this指针. name = 'global'; var obj1 = {name: 'foo'}; var showName = function() { console.log(this.name); } showName()…
背景: 小明想要用数组的形式为 Cls.func 传入多个参数,他想到了以下的写法: var a = new Cls.func.apply(null, [1, 2, 3]); 然而浏览器却报错Cls.func.apply is not a constructor. 乍一看是 new 操作符去修饰 Cls.func.apply 了,于是他又这么写: var a = (new Cls.func).apply(null, [1, 2, 3]); 浏览器依旧报错...好吧,还是好好查一查相关的解决方法吧…
在Javascript中,bind, apply, call方法都可以显式绑定上下文this,这三者有何不同呢? bind只绑定this不马上执行 var person = { firstname: 'darren', lastname: 'ji', getFullName: function(){ var fullname = this.firstname + ' ' + this.lastname; return fullname; } }; //在浏览器中这里的this就是指向window…
箭头函数不能用做构造函数 箭头函数没有arguments参数 箭头函数没有自己的this,是从作用域链上取this,是与箭头函数定义的位置有关的,与执行时谁调用无关,所以用call,apply,bind去调用箭头函数时,第一个参数会被忽略.非箭头函数是在函数调用时,在当前执行上下文里动态的取this. Function.prototype的bind, apply,call方法: apply,call和bind都为改变this的指向,利用这一点可以用它们来实现继承 function objFun(…
其实是一个很简单的东西,认真看十分钟就从一脸懵B 到完全 理解! 先看明白下面: 例1 obj.objAge;  //17 obj.myFun()  //小张年龄undefined 例2 shows()  //盲僧 比较一下这两者this 的差别,第一个this 指向obj,第二个全局声明的shows()函数   this 是window : 1,call().apply().bind() 都是用来重定义 this 这个对象的! 如: obj.myFun.call(db): //德玛年龄99  …
最近开发的过程中遇到了this指向问题,首先想到的是call().apply().bind()三个方法,有些时候这三个方法确实是十分重要,现在我们就把他们的使用方法及异同点讲解一下. 1.每个函数都包含三个非继承而来的方法,call()方法.apply()方法和bind()方法       2.相同点:三者的作用都是一样的,都是在特定作用中调用函数,等于设置函数体内this的值,以扩充函数赖以运行的作用域. 一般来说,this总是指向调用某个方法的对象,但是使用call().apply()和bi…
测试->运行环境chrom console >var aaa = {a:1,b:2,c:function(){console.log(this.a)}} 运行结果:undefined >aaa.c(); 运行结果:1 >var bbb = {a:10,b:20} 运行结果:undefined >aaa.c.apply(bbb);   //bbb对象执行aaa对象c()方法.c方法里面的this对象当然变成是bbb对象了. 通俗理解:bbb对象替换掉aaa对象,并执行方法. 运…
var foo = function(age,sex){ console.log(this.name,age,sex); }; //call将改变函数运行的context foo.call({name:"李明"},32,"男"); //更call一样可以改变context,差别在与参数使用数组传递 foo.apply({name:"李明"},[32,"男"]); //bind函数改变函数的context,但是它返回一个新的函数…
原文地址:http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ 注 这篇博文主要是写给新手的,是给那些刚刚开始接触Angular,并且想了解数据帮定是如何工作的人.如果你已经对Angular比较了解了,那强烈建议你直接去阅读源代码. Angular用户都想知道数据绑定是怎么实现的.你可能会看到各种各样的词汇:$watch,$apply,$digest,dirty-checking... 它们是什么?它们是如…