js call和apply方法的了解
来源:互联网 发布:现货白银软件 编辑:程序博客网 时间:2024/05/19 00:55
ECMAScript规范给所有函数都定义了call()与apply()两个方法,call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的,而apply传的剩余值必须为数组。
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。
call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
例子:
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入
同时call和apply可以用作类的继承作用
注:必须在子类里面进行调用父类.call(this)函数
call 方法
调用一个对象的一个方法,以另一个对象替换当前对象。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
参数
thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。
说明
call 方法可以用来代替另一个对象调用一个方法。
call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。这在面向对象的js编程过程中有时是很有用的。
例子:
function fun1() { this.a = 123; this.add = function () { return this.a }}function fun2() { this.a = 456;} var f1=new fun1() var f2=new fun2() // f1的add函数在f2的作用域里面进行执行 所以a的值是f2的 var a = f1.add.call(f2); // a输出的是456 function Obj(){this.value="对象!";} var value="global 变量"; function xxFun(){alert(this.value);} window.xxFun(); //global 变量 xxFun.call(window); //global 变量 xxFun.call(document.getElementById('myText')); //input text xxFun.call(new Obj()); //对象!
对于apply和call两者在作用上是相同的,但两者在参数上有区别的。
对于第一个参数意义都一样,但对第二个参数:
apply传入的是一个参数数组,也就是将多个参数组合成为一个数组传入,而call则作为call的参数传入(从第二个参数开始)。
如 func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
同时使用apply的好处是可以直接将当前函数的arguments对象作为apply的第二个参数传入
同时call和apply可以用作类的继承作用
注:必须在子类里面进行调用父类.call(this)函数
//父类function superObj() {this.member = " dnnsun_Member";this.method = function() {window.alert(this.member);}}//子类function subObj() {//base.call(this); 同样是可以 实现继承 superObj.apply(this);//如果自己有属性 则调用自己的属性this.member = '1234' ;alert(member); // 调用父类方法this.method();}
0 0
- js call和apply方法的了解
- js的call方法和apply方法
- js的call()和apply()方法
- js里的call和apply方法
- js的apply()和call()方法
- js 中apply方法和call方法的详解
- js apply和js call方法详解
- js apply和js call方法详解
- js apply和js call方法详解
- JS中的apply方法和call方法
- js 中的 call() 方法 和 apply()方法
- Js apply方法 和 call 方法详解
- JS call()方法和apply()方法
- 【JS--基础--函数】--函数的通用方法-call()和apply()
- 【js】javascript中call()和apply()方法的区别
- JS中call和apply方法的区别
- js中apply和call方法的应用
- 关于Js函数对象的apply()和call()方法
- Mysql 常见命令总结
- lua之 unpack
- 【通用】 使用 try catch 处理异常
- Java多线程-对歌式互动-Lock-Condition
- MySQL checksum了解
- js call和apply方法的了解
- js arguments和caller,callee
- mysql 常见函数总结
- Nginx-------Nginx的安装和多域名配置
- redis 安装
- Maven学习:常用mvn命令
- 每天一个Linux命令(31):du
- Maven scope含义的说明
- js RegExp对象学习结合字符串replace方法使用