call和apply的模拟实现】的更多相关文章

call 一句话介绍 call: call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法. 举个例子: var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call(foo); 注意两点: call 改变了 this 的指向,指向到 foo bar 函数执行了 模拟实现第一步 那么我们该怎么模拟实现这两个效果呢? 试想当调用 call 的时候,把 foo 对象改造成…
call 一句话介绍 call: call() 方法在使用一个指定的 this 值和若干个指定的参数值的前提下调用某个函数或方法. 举个例子: var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call(foo); // 1 注意两点: call 改变了 this 的指向,指向到 foo bar 函数执行了 模拟实现第一步 那么我们该怎么模拟实现这两个效果呢? 试想当调用 call 的时候,把 foo…
本文首发我的个人博客:前端小密圈,评论交流送1024邀请码,嘿嘿嘿…
参考: call和apply的模拟实现 1. call:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.call(A, args1,args2);即A对象调用B对象的方法. /*call()方法*/ function.call(thisObj[, arg1[, arg2[, [,...argN]]]]); 2.1 . 举例一说明: var foo = { value: 1 }; function bar() { console.log(this.value); } bar.call(…
1. 知识点补充: 首先在模拟实现前,先Mark一些我之前不知道的知识: a. eval(string)函数:可计算某个字符串,并执行其中的JavaScript代码 其中,string是必需传入的待计算或待执行的语句,并且必须是原始字符串的形式! eval(string)相当于<script> string </script> b. 类数组对象(Array-like Object) 类数组对象是一个对象,比如:arguments.DOM API返回的NodeList对象都属于类数组…
js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) thisObj可选项.将被用作当前对象的对象.arg1, arg2, argN ..可选项.将被传递方法参数序列. 如果没设置严格模式 “use strict” 当thisObj 不存在或 为 undefined 或为 null 或为 this 时,则隐式地指向 全局对象(在浏览器中即为 wi…
这是我在公众号(高级前端进阶)看到的文章,现在做笔记  https://github.com/yygmind/blog/issues/22 call() 和 apply() call() 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表). call() 和 apply()的区别在于,call()方法接受的是若干个参数的列表,而apply()方法接受的是一个包含多个参数的数组 举个例子: var func = function(arg1, arg2) { ...…
bind 一句话介绍 bind: bind() 方法会创建一个新函数.当这个新函数被调用时,bind() 的第一个参数将作为它运行时的 this,之后的一序列参数将会在传递的实参前传入作为它的参数.(来自于 MDN ) 由此我们可以首先得出 bind 函数的两个特点: 返回一个函数 可以传入参数 返回函数的模拟实现 从第一个特点开始,我们举个例子: var foo = { value: 1 }; function bar() { console.log(this.value); } // 返回了…
new 一句话介绍 new: new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象类型之一 也许有点难懂,我们在模拟 new 之前,先看看 new 实现了哪些功能. 举个例子: // Otaku 御宅族,简称宅 function Otaku (name, age) { this.name = name; this.age = age; this.habit = 'Games'; } // 因为缺乏锻炼的缘故,身体强度让人担忧 Otaku.prototype.strength =…
上一篇对call和apply的模拟实现做了一个梳理,可参见:模拟实现call.apply,下面将具体研究一下bind啦啦啦 1. bind和call/apply的差别 bind方法会创建一个新函数,返回值是一个绑定了上下文的函数 call和apply是将函数直接执行 描述: bind()函数会创建一个绑定函数(bound function,BF),它包装了原函数对象,调用该绑定函数即执行原函数 返回值:是一个原函数拷贝,并拥有指定的this值和初始参数 当一个绑定函数是用来作为构造函数即使用ne…