关于 this对象 指向问题
this 定义:this是包含它的函数作为方法被调用时所属的对象。(1,this所在的函数。2,此函数作为方法被调用。3,this等于调用此函数的对象)
this 对象在运行时基于函数的执行环境绑定的。在全局环境中this等于window,当函数作为某个对象的方法调用时,this等于那个对象。所以说,this的指向完全
取决于函数的调用方式。
1》函数的四种调用方式
1.函数调用模式
function fn() {console.log(this)}
fn(); //window
this是全局对象(window)
2.方法模式
var obj = {
a: function() {console.log(this)}
};
obj.a(); //this指向obj
this是当前调用方法的对象
3. 构造器模式(constructor)
function Fn() {this}//this指向p
var p = new Fn();
function Point(x, y){
this.x = x;
this.y = y;
}
this指向新创建出来的对象
4上下文模式 (通过call或apply改变函数执行环境的情况下 ,this 也会指向其他对象)
1.函数名.apply(this指向的对象,[参数1, 参数2, ...])
function foo() {console.log( this );}
foo.apply();//this指向window
foo.apply( null );//this指向window
var o = { name: 'aaa' };
foo.apply( o );//this指向o,用o调用foo
2. 函数名.call(this指向的对象,参1,参2...);
call和apply的区别 apply的第二个参数是数组形式,call第二个参数是单个参数分开传入
例子:
function Point(x, y){
this.x = x;
this.y = y;
this.moveTo = function(x, y){
this.x = x;
this.y = y;
}
}
var p1 = new Point(0, 0);
var p2 = {
x: 0,
y: 0
};
p1.moveTo(1, 1);
p1.moveTo.apply(p2, [10, 10]);
我们看到使用 apply 可以将 p1 的方法应用到 p2 上,这时候 this 也被绑定到对象 p2 上
2》在闭包中如果把外部作用域中的this对象保存在一个闭包能够访问到的变量里面。就可以让闭包访问该对象。
var name='jim';var obj={
name:'tom',
getName:function(){
var that=this;
return function(){
return that. name;
}
}
}
alert(obj.getName()())//'tom'
that是在包含函数中特意声明的变量 它指向的obj
3》语法的细微变化 也会引起this的变化
var name='jim';
var obj={
name:'tom',
getName:function(){
return this. name;
}
}
obj.getName() // tom
(obj.getName=obj.getName)()//jim
第二个打印进行了一次赋值操作 所谓赋值
如果a=b=function(){} 先将函数赋值给b 再将函数赋值给a
在例子中 (a=b)它是赋值后的结果 也就是函数本身 调用函数本身 则此时this指向window.
关于 this对象 指向问题的更多相关文章
- this对象指向
this表示函数运行时,自动生成的一个内部对象,只能在函数内部运行 function test(){ this.x = 1; } 随着使用场景的变化,this的值会发生变化 原则:this指的值调用函 ...
- 关于java基础中,接口里面父类的对象指向子类的引用
父类的引用指向子类的对象,它只能看的到父类的那些方法~ 子类自身的方法看不到-- ······························· 如: interface Singer { //定义了 ...
- JavaScript setTimeout this对象指向问题
上面这幅图片是原始的效果, 现在想鼠标移到图标上,显示图标的提示,但需要延时,也就是鼠标滑至图标上,并不立刻显示,而是等1秒后显示. html部分 <div class="porHea ...
- JavaScript中的this对象指向理解
在JavaScript中,this不是固定不变的,它的指向取决于上下文环境,一般的,认为this指向使用它时所在的对象.主要有以下几类指向: 在方法中,this 表示该方法所属的对象. 如果单独使用, ...
- 声明对象的方式/构造函数/原型/this指向
函数的发展历程(声明函数的方式): 1.通过Object构造函数或字面量的方式创建单个对象 var obj = new Object; obj.name="新华"; o ...
- 理解jQuery对象$.html
前面的话 如果要比喻jQuery和原生javascript的关系,我个人认为是自动档和手动档汽车的区别.使用原生javascript,可以知道离合器以及档位的作用:而使用jQuery,则把离合器和手动 ...
- java面向对象---对象容器
泛型类--ArrayList<>; 2.对象数组中的每个元素都是对象的管理者而并非对象本身!!!!! 3.java类的基本数据类型 基本数据类型 包装类 byte Byte short S ...
- iOS判断对象相等 重写isEqual、isEqualToClass、hash
相等的概念是探究哲学和数学的核心,并且对道德.公正和公共政策的问题有着深远的影响. 从一个经验主义者的角度来看,两个物体不能依据一些观测标准中分辨出来,它们就是相等的.在人文方面,平等主义者认为相等意 ...
- JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
随机推荐
- jQuery与CheckBox的值一致就选中
var area = data.area;//area的形式是1,2,3, area = area.substring(1,area.length-1);//1,2,3 var arr = new A ...
- Windows下安装Redis数据库并实现C#访问
1.Redis在Windows下的安装 目前Redis官方并不支持Redis的Windows版本,需要去GitHub下载. GitHub上的Redis分两种,一种是以命令行形式安装的,一种是以Wind ...
- 禁止linux被ping
cho "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf sysctl -p 生效 开启ping功能: 删除/ ...
- java之重定向与转发
昨天搞了一个问题,关于手机返回按钮的(Android机,ios没有返回键) 在每一步操作都要进过鉴权,如果鉴权不通过就需要跳转到指定jsp页面,再进行link:到app进行登录操作: 然后问题出现了, ...
- VisualStudio2017下ASP.NET CORE的TagHelper智能提示解决办法
之前在VS2017RC中就发现该问题,安装了依赖,但是前段一直点不出来asp-for,后来查了发行说明, 才知道在VS2017rc中暂时无法解决,所以一直等到VS2017正式版的发布,急冲冲的装好, ...
- 3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队
3400: [Usaco2009 Mar]Cow Frisbee Team 奶牛沙盘队 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 129 Solv ...
- python 的正则表达式 贪婪模式与懒惰模式
正则表达式中用于表示匹配数量的元字符如下: ? 重复0次或1次,等同于{0,1} * 重复0次或更多次,等同于{0,} + 重复1次或更多次,等同于{1,} {n,} 重复n次及以上 上面的表示匹配次 ...
- Jdom读取XML文件
学习Spring时,我们经常看到很多xml配置文件,Spring通过在配置文件中的配置,使用IOC(控制反转),从而实现代码的灵活性,本篇我就为大家介绍一种解析xml方式--Jdom 首先我们到Jdo ...
- 【转】深入理解RunLoop
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...
- [译]Selenium Python文档:五、Waits等待
大多数现代web应用都使用了AJAX技术.当浏览器加载一个页面的时候,该页面内的元素可能在不用的时间间隔内进行加载.这使得元素定位变得比较困难:如果一个元素还没有出现在DOM中,定位函数将会抛出一个E ...