js的apply和call】的更多相关文章

今天在学习vue.js的render时,遇到需要重复构造多个同类型对象的问题,在这里发现原生JS中apply()方法的一个特殊的用法: var ary = Array.apply(null, { "length": 5, "0": 'eat', "1": 'play' });//得到ary = ['eat', 'play', undefined*3] 在这个用法中,apply的第一个参数为null,第二个参数是一个包含length字段的对象,查了…
js中apply方法的使用   1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; } 除此之外,还有种方法,就是:Function.apply(当然使用Function.…
最近一直在用 js 写游戏服务器,我也接触 js 时间不长,大学的时候用 js 做过一个 H3C 的 web的项目,然后在腾讯实习的时候用 js 写过一些奇怪的程序,自己也用 js 写过几个的网站.但真正大规模的使用 js 这还是第一次.我也是初生牛犊不怕虎,这次服务器居然抛弃 C++ 和 lua 的正统搭配,而尝试用 nodejs 来写游戏服务器,折腾的自己要死要活的我也是醉了. 在给我们项目组的其他程序介绍 js 的时候,我准备了很多的内容,但看起来效果不大,果然光讲还是不行的,必须动手.前…
为了加深对基础知识的理解,今天再复习下js中的apply,call,bind的区别和用法.整理笔记的过程也是一个再次学习的过程. apply和call js中的调用apply和call方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向值. 例子: var person={ name:'aa', getName:function(){ console.log(this.name); } } var person2 = { name:'bb' } person.getName(…
相同点:JS中call与apply方法可以改变某个函数执行的上下文环境,也就是可以改变函数内this的指向.区别:call与apply方法的参数中,第一个参数都是指定的上下文环境或者指定的对象,而call()方法传入的参数都是不定的,而apply()方法传入的参数都是放入数组中才能传入的. bind()方法与call()和apply()方法很相似,都是可以改变函数内this的指向. MDN的解释是:bind()方法会创建一个新函数,称为绑定函数,当调用这个绑定函数时,绑定函数会以创建它时传入bi…
1.各自对应的不同的语法: /*apply()方法*/ function.apply(thisObj[, argArray]) /*call()方法*/ function.call(thisObj[, arg1[, arg2[, [,...argN]]]]); 2.各自不同的定义: call方法: 语法:call(thisObj,Object)定义:调用一个对象的一个方法,以另一个对象替换当前对象.说明:call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从初…
Javascript中有一个call和apply方法,其作用基本相同,但是它们也有略微不同的地方. JS手册中对call方法的解释是: call方法:调用一个对象的一个方法,以另一个对象替换当前对象. call(thisObj,arg1,arg2……) 参数: thisObj  可选项,将被用作当前对象的对象. arg1,arg2……argN 可选项,将被传递参数列表. call方法可以用来代替另一个对象调用一个方法.call方法可以将一个函数的对象上下文从初始的上下文改变为由thisObj指定…
之一------(函数的劫持与对象的复制)关于对象的继承,一般的做法是用复制法: Object.extend见protpotype.js 的实现方法: Object.extend = function(destination, source) {    for (property in source) {      destination[property] = source[property];    }    return destination;  }  除此以外,还有一种不太常见的方法:…
关于call与apply的理解容易让人凌乱,这里有个方法可供参考 tiger.call(fox,arg1,arg2...) tiger.apply(fox,[arg1,arg2...]) 理解为 fox入侵者,是狡猾.邪恶的入侵者,乘tiger为难之际(召唤call\apply),成功欺骗tiger可怜的守卫(入口参数),入侵了tiger, 拥有了tiger的一切:财富.老婆.孩子... 可恨.可叹tiger英雄一世,如此落入宵小之手 关于函数对象.对象实例.prototype.Construc…
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 参数thisObj可选项.将被用作当前对象的对象. arg1, arg2,  , argN可选项.将被传递方法参数序列. 说明call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从…
学习http://www.cnblogs.com/delin/archive/2010/06/17/1759695.html 1.对象的继承,一般的做法是复制:Object.extend prototype.js的实现方式是: Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destinatio…
JS中有时常用到 apply 和 call 两个方法,搜索网上很多,整理如下,简单看看这两个联系和区别, 联系: 网上查到关于apply和call的定义:这两个方法都能劫持另外一个对象的方法,继承另外一个对象的属性. xxxFunction.apply(obj,args) 方法接收两个参数obj:这个对象将代替xxxFunction类里this对象,也即xxxFunction类(函数)里的this不在是指 xxxFunction 本身,而是obj:args:这个是数组类型的参数,它将作为参数传给…
JavaScript中有一个call和apply方法,其作用基本相同,但也有略微的区别. 先来看看JS手册中对call的解释: call 方法调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 参数thisObj可选项.将被用作当前对象的对象. arg1, arg2,  , argN可选项.将被传递方法参数序列. 说明call 方法可以用来代替另一个对象调用一个方法.call 方法可将一个函数的对象上下文从…
为纪念10年没写blog,第一篇博文就以这样一个有趣的窍门开始吧 -___- 在ES5中,当我们调用一个函数时,如果要传入的参数是根据其他函数或条件判断生成的,也就是说不确定会传入多少个参数时,在不改变原函数的情况下该如何办呢? (当然了,能避免此文所述情况发生就尽量避免,比如将参数改为object或array等等) 大部分人可能知道用apply能完美解决这个问题: apply与call一样会将第一个参数作为函数的调用对象,即改写了调用函数内的this指针为第一个参数,如果不是对象的方法,可以不…
1.apply()方法 apply方法能劫持另外一个对象的方法,继承另外一个对象的属性.  Function.apply(obj,args)方法能接收两个参数     obj:这个对象将代替Function类里this对象     args:这个是数组,它将作为参数传给Function(args-->arguments) 使用apply()方法时可以直接将当前函数的arguments对象作为apply的第二个参数传入 (1)apply()方法可实现继承 eg:function Person(na…
参考文章:https://www.zhihu.com/question/20289071 引用:call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向.因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念. 这个上下文就造就了call和apply的来源,即可以改变一个函数中this的指向, obj1.call(obj2,arguments) 相当于obj2…
最近研究OpenLayers源码时,发现其中使用了比较多的apply方法,对其也是很不明白.于是上网经过多方面了解以及自己细细体会后,终于算是基本明白是其干什么的了,这里分享下.apply方法的造型是这样的,Function.apply(obj,args) 能接收两个参数:obj:这个对象将代替Function类里this对象args:这个是数组,它将作为参数传递.按网上大牛的解释是apply:劫持另外一个对象(a)的方法,继承a的属性.为了进一步理解,我自己做了下小例子,如下: (functi…
call apply bind作用类似.即调用一个对象的一个方法,以另一个对象替换当前对象. call 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) apply 语法:apply([thisObj[,argArray]]) bind  call()  apply() 都是立马就调用了对应的函数,而 bind() 不会, bind() 会生成一个新的函数,bind() 函数的参数跟 call() 一致,第一个参数也是绑定对象,后面接受传递给函数的不…
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数obj:这个对象将代替Function类里this对象args:数组,作为参数传给Function(args-->arguments) call:和apply的意思一样,只不过是参数列表不一样. Function.call(obj,[param1[,param2[,…[,paramN]]]])obj:这个对象将代替Function类里this对象params:这个…
JavaScript中,apply()与call()的含义一样,均为改变调用函数中的this指向.其中apply()与call()的第一个参数表示所要指向的对象,若调用函数无参数可不写,则默认为window.第一个参数后的参数表示调用函数的参数,其中apply()第一个参数后面的参数为一个数组,call()第一个参数后面为0或多个参数. 例: window.x = 100; var obj = {}; obj.x = 1; obj.test = function(a) { alert(this.…
因为object没有某个方法,但是别的对象有,可以借助apply或call像别的对象借方法来操作. 猫吃鱼,狗吃肉,奥特曼打小怪兽. 有天狗想吃鱼了 猫.吃鱼.call(狗,鱼) 狗就吃到鱼了 猫成精了,想打怪兽 奥特曼.打小怪兽.call(猫,小怪兽) call需要把参数按顺序传递进去,而apply则是把参数放在数组里. 明确知道参数数量时,用call: 而不确定的时候,用apply把参数放在数组里传递进去. call和apply其实是同一种东西,区别只是参数不同.call其实是apply的语…
function Person(age) { this.age = age; } Person.prototype.sayHi = function (x, y) { console.log((x + y) + ":====>" + this.age); //是实例对象 }; function Student(age) { this.age = age; } var per = new Person(10); //实例对象 var stu = new Student(100);…
你是否写过或见到过这样的代码 xx.apply(this,slice.call(arguments)) //slice.call转为数组是否多余 mdn地址 msdn地址 一.微软和mdn对参数的介绍 msdn上写的是一组参数(A set of arguments to be passed to the function.) mdn写的就很清楚了是"An array-like object",即类似数组. 二.什么是类数组 具有length,键值为int型,可循环.如jQuery的is…
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> //第一个用途:函数上下文模式改变this的指向 var age=19; function fun() { console.log(this.age); } var obj={ age:26 }; f…
1.apply(); function box(n1,n2){ return n1+n2; } function pox(n1,n2){ alert(box.apply(this,[n1,n2])); //this指window下全局属性 //这里没有返回值,没有运算,通过冒充box里的运算来执行 } pox(,); 注:如果参数过多,冒充对象传参的时候可以写成arguments function box(n1,n2){ return n1+n2; } function pox1(n1,n2){…
call.apply.bindcat.call(dog, a, b) == cat.apply(dog, [a, b]) == (cat.bind(dog, a, b))() 1.作用 改变函数内的this指向 var name = 'window', foo = {name: 'foo'}; function fn () { console.log(this.name) } fn();//window fn.call(foo);//foo 2.用法 call 语法: foo.call(this…
上下文调用模式 可以修改this的值,也就是可以修改函数的调用方式,apply.call可以修改函数调用上下文,也就是this的值 <script> var name = "莱昂纳多·自强·郭"; function sayHello(a, b) { console.log(this.name + "吃了" + (a * b) + "个馒头"); } var obj = { name: "尼古拉斯·电饭·锅" } v…
关于call和apply,以前也思考良久,很多时候都以为记住了,但是,我太难了.今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 一.apply函数定义与理解,先从apply函数出发 在MDN上,apply的定义是: “apply()方法调用一个具有给定this值的函数,以及作为一个数组(或类似数组对象)提供的参数.” 我的理解是:apply的前面有个含有this的对象,设为A,apply()的参数里,也含有一个含有this的对象设为B.则A.apply…
1.Function.apply,用于构造函数的继承,继承另外一个构建对象的属性与方法 function People(name,age){     this.name = name;     this.age = age; } function Student(age){     this.age = age;     People.apply(this,arguments) } var stu = new Student('liujinyu','12'); var peo = new Peo…
报错内容: Maximum call stack size exceeded 参考:https://www.jianshu.com/p/b9ba0ddd3392 对象较多,前端JS内存溢出: 数组克隆发生内存溢出位置修改: JS对象数组深拷贝:https://cloud.tencent.com/developer/article/1417051 参考文档:https://www.e-learn.cn/content/wangluowenzhang/102940…