您当前的位置: 首页 >  Java

插件开发

暂无认证

  • 4浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

javascript-js-this指针-组织代码-动态改变

插件开发 发布时间:2022-03-15 08:33:46 ,浏览量:4

文章目录
    • 1.this指针
    • 2.作者答疑

1.this指针

  如何有效的利用好JS中的this关键词,关系编程效率,this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象。

//例子1
var o = {
    user:"知了",
    fn:function(){
        console.log(this.user);  //知了
    }
}
o.fn();

  如果一个函数中有this,但是它没有被上一级的对象所调用,那么this指向的就是window。

//例子2
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永远指向的是最后调用它的对象,也就是看它执行的时候是谁调用的,例子2中虽然函数fn是被对象o所引用,但是在将fn赋值给变量j的时候并没有执行,所以最终指向的是window,这和例子1是不一样的,例子1是直接执行了fn。

function Fn(){
    this.user = "万千知了";
}
var a = new Fn();
console.log(a.user); //万千知了

  这里之所以对象a可以点出函数Fn里面的user是因为new关键字可以改变this的指向,将这个this指向对象a,为什么我说a是对象,因为用了new关键字就是创建一个对象实例。

  最后一个小问题:

function fn()  
{  
    this.user = '万千知了';  
    return {};  
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = '万千知了';  
    return function(){};
}
var a = new fn;  
console.log(a.user); //undefined
function fn()  
{  
    this.user = '万千知了';  
    return 1;
}
var a = new fn;  
console.log(a.user); //万千知了
function fn()  
{  
    this.user = '万千知了';  
    return undefined;
}
var a = new fn;  
console.log(a.user); //万千知了

  如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

function fn()  
{  
    this.user = '万千知了';  
    return undefined;
}
var a = new fn;  
console.log(a); //fn {user: "万千知了"}

  还有一点就是虽然null也是对象,但是在这里this还是指向那个函数的实例,因为null比较特殊。

function fn()  
{  
    this.user = '万千知了';  
    return null;
}
var a = new fn;  
console.log(a.user); //万千知了

  new一个空对象的时候,js内部的实现并不一定是用的apply方法来改变this指向的。

2.作者答疑

  如有疑问,请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0439s