2015.9.22随笔
来源:互联网 发布:国泰安数据库好用吗 编辑:程序博客网 时间:2024/05/18 00:30
最近一直看到javascript的call和apply方法,记录一下
首先手册上写的两个方法的定义
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。
apply方法:
语法:apply([thisObj[,argArray]])
定义:应用某一对象的一个方法,用另一个对象替换当前对象。
说明:
如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
这两个方法都可以改变对象的this指向的内容
这个例子比较直观
<input type="text" id="myText" value="input text"><script> function Obj(){this.value="对象!";} var value="global 变量"; function Fun1(){alert(this.value);} window.Fun1(); //global 变量 Fun1.call(window); //global 变量 Fun1.call(document.getElementById('myText')); //input text Fun1.call(new Obj()); //对象!</script>
<script> var func=new function(){this.a="func"} var myfunc=function(x){ var a="myfunc"; alert(this.a); alert(x); } myfunc.call(func,"var");</script>
call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。
区别是
func.call(func1,var1,var2,var3)对应的apply写法为:func.apply(func1,[var1,var2,var3])
补充一点
Object.prototype.toString().call()可以几乎完美区分对象类型
0 0
- 2015.9.22随笔
- 2015.9.24随笔
- 06-11-22随笔
- 随笔录2014.5.22
- 2015-7-22随笔
- 随笔--2015.10.22
- 随笔 17.10.22
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 随笔
- 修改oracle数据库服务器端字符集,修正cmd里面的乱码显示
- 如何给电脑磁盘分区
- Ruby:字符串处理函数
- ios讲解迷惑深入浅出之GCD
- 一种ARM模拟器的实现(一)
- 2015.9.22随笔
- PyCharm下切换Python版本
- 模仿R语言c++ 向量类c 矩阵类matrix等(持续更新 欢迎指点)
- jvm 基础 性能监控工具
- android JNI开发C++代码对assets文件的访问
- Android IntentService的使用
- Android 设计模式
- iOS经典讲解之多线程GCD的应用
- 关于rpm 命令的--changelog参数