this各种指向
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)对象的方法
如果对象的方法里面包含this
,this
的指向就是方法运行时所在的对象。该方法赋值给另一个对象,就会改变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学习之路发布,如需转载请注明出处。