JS中的this指向

    首先,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。

一、全局环境中

    在全局执行环境中(在任何函数体外部),this都是指向全局对象。在浏览器中,window对象即是全局对象:
  function a(){
     var person="吉埃斯"
     console.log(this.person)//undefined
     console.log(this)//Window
  }
  a()
//上面函数对a的调用相当于window.a(),若浏览器器使用严格模式则this为undefined
	var o={
	   person:"吉埃斯"
	   fn:function(){
	      console.log(this.person)
	   }
	}
	o.fn()
//这里fn是通过o对象调用的,所以fn中的this指向o

二、函数环境中

1、 js中的call和apply方法可以改变this的指向,将this所指向的对象作为calll或apply的第一个参数

var obj={name:'吉埃斯'}
var name='Jack'
function Person(){
   console.log(this.name)
}
fn()//Jack  相当于window.fn()  this指向window
fn.call(obj)//吉埃斯
fn.apply(obj)//吉埃斯

2、new创建新实例对象,也会将改变this指向新创建的实例对象

  • new一个对象的过程
function Person(name,age){
   this.name=name
   this.age=age
}
var p=new Person(name,age)
  1. 首先创建一个空对象
var obj=new Object()
  1. 让Person的this指向obj
 var result=Person.call(obj)
  1. 设置原型链,将obj的__proto__成员指向了Person函数对象的prototype成员对象
obj.__proto__=Person.prototype
  1. 判断Person的返回值类型,如果是值类型,返回obj。如果是引用类型,就返回这个引用类型的对象。
if(typeof result=='object'){
    Person=result
 }else{
    Person=obj
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值