this
var a = { name:'A', fn:function(){ console.log(this.name); }}a.fn() //this === Aa.fn.call({name:'B'}) //this === {name:'B'}var fn1 = a.fn;fn1() //this === window
- 作为构造函数执行
- 作为对象属性执行
- 作为普通函数执行
- call apply bind
function Foo(name){ this.name = name;}var f = new Foo('zhangsan');var obj = { name:'A', printName:function(){ console.log(this.name); }}obj.printName()function fn(){ console.log(this);}fn()// call apply bindfunction fn1(name) { alert(name); console.log(this);}fn1.call({x:100},'zhangsan',20);// bindvar fn2 = function fn2(name) { alert(name); console.log(this);}.bind({y:200});fn2('zhangsan',20);
this几种不停的使用场景
- 作为构造函数执行
- 作为对象属性执行
- 作为普通函数执行
- call apply bind
function Foo(name){ this.name = name;}var f = new Foo('zhangsan');var obj = { name:'A', printName:function(){ console.log(this.name); }}obj.printName()function fn(){ console.log(this);}fn()// call apply bindfunction fn1(name) { alert(name); console.log(this);}fn1.call({x:100},'zhangsan',20);// bindvar fn2 = function fn2(name) { alert(name); console.log(this);}.bind({y:200});fn2('zhangsan',20);