js中this指向问题实例详解
2016-04-28 11:08
736 查看
JS中, this的值到底是什么?
几个月之前, 拜读了《javascript语言精髓》, 里面对于这个问题, 做出了很好的解释…
JS中, this的值取决于调用的模式, 而JS中共有4中调用模式:
方法调用模式
当一个函数被保存为对象的一个属性时, 我们称它为一个方法, 当一个方法被调用时, this指向该对象, 如:
注意: 该模式中, this到对象的绑定发生在方法被调用的时候.
函数调用模式
当一个函数并非一个对象的属性时, 它被当作一个函数来调用, 此时的this指向全局对象(window), 如:
构造器调用模式
结合new前缀调用的函数被称为构造器函数, 此时的this指向该构造器函数的实例对象, 如:
apply/call调用模式
apply和call方法可以让我们设定调用者中的this指向谁, 如:
几个月之前, 拜读了《javascript语言精髓》, 里面对于这个问题, 做出了很好的解释…
JS中, this的值取决于调用的模式, 而JS中共有4中调用模式:
方法调用模式
当一个函数被保存为对象的一个属性时, 我们称它为一个方法, 当一个方法被调用时, this指向该对象, 如:
var obj = { value: 1, getValue: function() { alert(this.value); } }; obj.getValue(); // 输出1, 此时的this指向obj
注意: 该模式中, this到对象的绑定发生在方法被调用的时候.
函数调用模式
当一个函数并非一个对象的属性时, 它被当作一个函数来调用, 此时的this指向全局对象(window), 如:
window.value = 1; function getValue() { alert(this.value); } getValue(); // 输出1, 此时的this指向window.
构造器调用模式
结合new前缀调用的函数被称为构造器函数, 此时的this指向该构造器函数的实例对象, 如:
function show(val) { this.value = val; }; show.prototype.getVal = function() { alert(this.value); }; var func = new show(1); func.getVal(); // 输出1 alert(func.value) // 输出1 // 从上面的结果, 可以看出, 此时的this指向了func对象.
apply/call调用模式
apply和call方法可以让我们设定调用者中的this指向谁, 如:
var fun = function(str) { this.status = str; } fun.prototype.getStatus = function() { alert(this.status); } var obj = { status: "loading" }; fun.prototype.getStatus.apply(obj); // 输出"loading", 此时getStatus方法中的this指向了obj
相关文章推荐
- JS 中的 with 关键字
- JS实现的base64加密解密完整实例
- d3.js——绘制静态中国地图
- javascript 实现简单的div拖动
- [转] 考验你的JavaScript底细
- js 定时器运作原理实例
- tab选项卡切换效果(一)——滑过切换和点击切换
- IFRAME高度进行自适应 javascript脚本编写【JAVASCRIP】
- JSF环境搭建web.xml和faces-config.xml配置
- ajax 局部刷新,返回json字符串
- jsp获取请求路径
- JavaScript操作Cookie
- Newtonsoft.Json 序列化和反序列化 时间格式
- Js中的继承
- 屏蔽右键菜单(JS)
- 错题集
- js正则函数match、exec、test、search、replace、split使用介绍集合
- js正则验证手机号
- 流行的更换图片的javascript函数集--MM_swapImage函数和MM_swapImgRestore函数
- location方法详解,获取地址栏URL请求参数,以对象形式保存