当前位置:首页 > javascript > 正文内容

this各种指向

自由小鸟7年前 (2018-07-31)javascript2782

1由于对象的属性可以赋给另一个对象,所以属性所在的当前对象是可变的,即this的指向是可变的。

2,只要函数被赋给另一个变量,this的指向就会变。


var A = {  
    name: '张三',  
    describe: function () {    
        return '姓名:'+ this.name;
    }
};
var name = '李四';
var f = A.describe;
f() // "姓名:李四"

(1)全局环境使用this,它指的就是顶层对象window

(2)构造函数

构造函数中的this,指的是实例对象。

(3)对象的方法

如果对象的方法里面包含thisthis的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变this的指向。

函数赋值再调用这种情况一般this 指向就会变成window

var obj ={  foo: function () {    
    console.log(this);
  }
};

obj.foo() // obj
// 情况一(obj.foo = obj.foo)() // window
// 情况二(false || obj.foo)() // window
// 情况三(1, obj.foo)() // window

    (4)如果this所在的方法不在对象的第一层,这时this只是指向当前一层的对象,而不会继承更上面的层。

var a = { 
    p: 'Hello',      
    b: {    
        m: function() {      
            console.log(this.p);
        }
    }
};

a.b.m() // undefined

使用注意点 

1,避免多层 this(由于this的指向是不确定的,所以切勿在函数中包含多层的this)


bind(a).bind(b)只生效一次,多层的指针后面的不生效

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://www.webge.net/?id=16

“this各种指向” 的相关文章

js中clientHeight,offsetHeight,scrollHeight的区别

js中clientHeight,offsetHeight,scrollHeight的区别

一 clientHeight,offsetHeight,scrollHeight的区别  clientHeight在各个浏览器中基本是一样的,一致认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,不包括滚动条,不包括margin,但包括padding,也就是说实际的clie...

函数参数会生成新的作用域

函数参数会生成新的作用域

如果函数定义了参数就会自动生成新的作用域,这时候里面的变量值就会先从参数新的作用域找,如果没有就会再往上面找直到全局...

防抖和节流

如果我在一个时间内只执行一次,最好用防抖,如果只是想在执行时,设置一下间隔时间那么用节流 防抖是在一个时间内只能执行一次,如果频繁操作就会清除重新开始计算执行,我设置的时间内整个过程中只会执行一次/* 函数的防抖 debounce,不是某个事件触发就去执行函数,而是在指定的时间间隔内执行...

js 宏任务和微任务

js 宏任务和微任务

首先讲粗略说一下宏任务和微任务宏任务:script(整体代码), setTimeout, setInterval微任务包括: Promise, MutationObserver(html5新特性),process.nextTick。 代码从上至下在执行过程,遇到Promise,new Promi...

js原型链

js原型链

看到好的文章赶紧都收藏起来,但是有时收藏的太多内存不够呀,还是记录到我的博客上比较好,有时好的文章突然的某天就打不开了,那是多少痛的领悟,哈哈 文章转自 https://juejin.im/post/5d31ea79e51d457778117452...