call和apply的第一个参数是null/undefined时函数内的的this指向window或global
来源:互联网 发布:js时间段选择插件 编辑:程序博客网 时间:2024/06/02 21:15
转自 :http://www.cnblogs.com/snandy/archive/2012/03/01/2373243.html
对应的函数修改
//转换obj转url参数形式 param要转换的对象或数组,key为形成的参数数组的前缀名字,startIndex 为数组开始的序号
function parseParam(param, key, startIndex) {
var paramStr = "";
if (param instanceof String || param instanceof Number || param instanceof Boolean) {
paramStr += "&" + key + "=" + encodeURIComponent(param);
} else {
$.each(param, function (i) {
if (startIndex == undefined) {
startIndex = 0;
}
var k = key == null ? i : key + (param instanceof Array ? "[" + (i + startIndex) + "]" : "." + i);
if (param[i] == undefined) {
paramStr += '&' + parseParam("", k);
}
else {
paramStr += '&' + parseParam(this, k);//当为undefined时,this为window.
}
});
}
return paramStr.substr(1);
}
Snandy
Stop, thinking is the essence of progress.
call和apply的第一个参数是null/undefined时函数内的的this指向window或global
call/apply用来改变函数的执行上下文(this),它们的第一个参数thisArg是个对象,即作为函数内的this。
多数时候你传啥函数内就是啥。仅以call示例
function
fun() {
alert(
this
);
}
fun.call(1);
fun.call(
'a'
);
fun.call(
true
);
fun.call({name:
'jack'
});
分别弹出“1”、“a”、“true”、“[object Object]”。
有两种情况需要注意,传null或undefined时,将是JS执行环境的全局变量。浏览器中是window,其它环境(如node)则是global。
fun.call(
null
);
// window or global
fun.call(undefined);
// window or global
这在ECMAScript5.1 15.3.4.4中有解释,如下
严格模式下情况又有所不同,ES3比较宽容尽量去揣测代码意图。ES5严格模式(ie6/7/8/9除外)则不再揣测,给call/apply传入的任何参数不再转换。如下
'use strict'
function
fun() {
alert(
this
);
}
fun.call(
null
)
// null
fun.call(undefined)
// undefined
须注意!
- call和apply的第一个参数是null/undefined时函数内的的this指向window或global
- 函数中的this指向,以及 修改this指向的 call/apply/bind方法
- 面试题:this指针的指向,以及call、apply应用
- setTimeout的this指向:学习apply、call、bind
- js中this的改变指向的方法:call和apply、bind
- js的call和this指向系列
- this call apply的认识
- 【JavaScript】函数内的this指向谁
- AS3 中,Function.apply、call中第一个参数的作用;与什么时候用;
- 关于javascript的apply和call函数
- javascript 函数的方法call()和apply()
- 关于javascript的apply和call函数
- 关于javascript的apply和call函数
- 函数apply和call的简单例子
- js的this指针指向谁,以及相关的call、apply、bind方法
- C为什么要把数组类型的函数参数认为是指向数组第一个元素的指针
- JavaScript中call,apply,bind方法的总结(改变this指向)
- 函数内部属性 arguments、this 以及非继承而来的方法 call()和 apply()
- java小程序:闹钟(倒计时)
- app widget添加流程
- Linux 系统挂载数据盘
- Tiny6410自动挂载U盘、SD卡等设备的一点知识
- VC++的一个正则错误
- call和apply的第一个参数是null/undefined时函数内的的this指向window或global
- tolua总结(二)
- Spring学习 5
- linux后台运行程序(secureCRT断掉或关闭后继续运行程序)
- DevExpress某些控件继承后的可编辑性
- tolua总结(三)
- statemachine详解
- cocos2d-x屏幕适配原理分析
- javaVM 判断对象实例何时回收 用的可达性分析算法,而非引用计数算法