**this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁**,**实际上this的最终指向的是那个调用它的对象**
* 在方法中,this指的是所有者对象。
* 单独的情况下,this指的是全局对象。
* 在函数中,this指的是全局对象。
* 在函数中,严格模式下,this是 undefined。
* 在事件中,this指的是接收事件的元素。
像call()和apply()这样的方法可以将 this 引用到任何对象。
~~~
function demo(){
var userName = "today";
console.log(this.userName); //undefined
console.log(this); //Window
}
demo();
window.demo()
~~~
this最终指向的是调用它的对象,这里的函数a实际是被Window对象所点出来的
~~~
var obj = {
userName : "today";
fn:function(){
console.log(this.userName); //today
}
}
obj.fn();
window.obj.fn()
~~~
这里的this指向的是对象obj,因为你调用这个fn是通过obj.fn()执行的,那自然指向就是对象obj,这里再次强调一点,this的指向在函数创建的时候是决定不了的,在调用的时候才能决定,谁调用的就指向谁,一定要搞清楚这个。
window是js中的全局对象,我们创建的变量实际上是给window添加属性,所以这里可以用window点obj对象。
~~~
var obj = {
a:10,
b:{
a:12,
fn:function(){
console.log(this.a); //undefined
console.log(this); //window
}
}
}
var j = obj.b.fn;
j();
~~~
this永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,虽然函数fn是被对象b所引用,但是在将fn赋值给变量j的时候并没有执行所以最终指向的是window.
~~~
function fn()
{
this.userName : "today";
return {};
}
var a = new fn;
console.log(a.userName ); //undefined
~~~
如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。
虽然null也是对象,但是在这里this还是指向那个函数的实例,因为null比较特殊。
- 序言
- 从业感悟
- 常用名词
- HTML
- JS
- ES6新特性
- jquery和vue对比
- 彻底理解this
- JQuery添加自定义函数
- js的实现
- 原始值和引用值
- MYSQL
- 简介
- 术语
- 特点
- 范式
- 数据类型1
- 数据类型2
- 编码
- 权限管理
- 事务
- mvvc
- 引擎
- MyISAM与InnoDB区别
- 索引类型
- 锁
- 死锁
- 分层架构
- 执行计划
- join原理
- 高可用
- 日志类型
- 分库分表
- 中间件
- 服务器
- 操作系统
- 信号量 锁 队列
- PHP
- composer加载原理
- composer基础知识
- 自动加载函数
- composer加载代码
- composer 自动加载
- 内存管理
- PHP执行流程
- cgi,fastCgi,php-fpm
- HTTP
- 错误码
- 跨域请求
- 面试
- 安全
- HTTP劫持
- 设计模式
- 如何正确的使用设计模式
- 单例模式
- 原型模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 设计原则
- 算法
- PHP短标签