您好,欢迎来到尚车旅游网。
搜索
您的当前位置:首页JS中函数的this各种指向

JS中函数的this各种指向

来源:尚车旅游网
JS中函数的this各种指向

  this是js的⼀个关键字,随着函数使⽤场合不同,this的值会发⽣变化。但是总有⼀个原则,那就是this指的是调⽤函数的那个对象。

情形1:如果⼀个函数中有this,但是它没有被上⼀级的对象所调⽤,那么this指向的就是window,这⾥需要说明的是在js的严格版中this指向的不是window。情形2:如果⼀个函数中有this,这个函数有被上⼀级的对象所调⽤,那么this指向的就是上⼀级的对象。

情形3:如果⼀个函数中有this,这个函数中包含多个对象,尽管这个函数是被最外层的对象所调⽤,this指向的也只是它上⼀级的对象。⼀些例⼦:

//this最终指向的是调⽤它的对象,这⾥的函数a实际是被Window对象所点出来的

//this指向的是对象o,因为你调⽤这个fn是通过o.fn()执⾏的,那⾃然指向就是对象o

var o = { a:10, b:{

a:12,

fn:function(){

console.log(this.a); //12 } }}

o.b.fn();

//尽管对象b中没有属性a,这个this指向的也是对象b,因为this只会指向它的上⼀级对象,不管这个对象中有没有this要的东西。var o = { a:10, b:{

// a:12,

fn:function(){

console.log(this.a); //undefined } }}

o.b.fn();

var o = { a:10, b:{

a:12,

fn:function(){

console.log(this.a); //undefined console.log(this); //window } }}

var j=o.b.fn;j();

//构造函数版this: function Fn(){

this.user = \"Sherry\"; }

var a = new Fn();

console.log(a.user); //Sherry

//这⾥之所以对象a可以点出函数Fn⾥⾯的user是因为new关键字可以改变this的指向,将这个this指向对象a,为什么说a是对象,因为⽤了new关键字就是创建⼀个对象实例,我们这⾥⽤变量a创建了⼀个Fn的实例(相当于复制了⼀份Fn到对象a⾥⾯) function fn() {

this.user = 'Sherry'; return {}; }

var a = new fn;

console.log(a.user); //undefined

function fn() {

this.user = 'Sherry'; return function(){}; }

var a = new fn;

console.log(a.user); //undefined

function fn() {

this.user = 'Sherry'; return 1; }

var a = new fn;

console.log(a.user); //Sherry

function fn() {

this.user = 'Sherry'; return undefined; }

var a = new fn;

console.log(a.user); //Sherry

//以上:如果返回值是⼀个对象,那么this指向的就是那个返回的对象,如果返回值不是⼀个对象那么this还是指向函数的实例。 function fn() {

this.user = 'Sherry'; return undefined; }

var a = new fn;

console.log(a); //fn {user: \"Sherry\

//虽然null也是对象,但是在这⾥this还是指向那个函数的实例,因为null⽐较特殊。 function fn() {

this.user = 'Sherry'; return null; }

var a = new fn;

console.log(a.user); //Sherry

注意点:

1.在严格版中的默认的this不再是window,⽽是undefined。

2.new操作符会改变函数this的指向问题,虽然我们上⾯讲解过了,但是并没有深⼊的讨论这个问题,⽹上也很少说,所以在这⾥有必要说⼀下。

function fn(){ this.num = 1; }

var a = new fn();

console.log(a.num); //1

//为什么this会指向a?⾸先new关键字会创建⼀个空的对象,然后会⾃动调⽤⼀个函数apply⽅法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sceh.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务