this指向
明确:
this的指向在函数定义的时候是确定不了的,
只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
例子1:
function a(){
var user = "kaikai";
console.log(this.user); //undefined
console.log(this); //Window
}
a(); //调用a的对象是 Window,所以它里面的this指向 window
例子2:
var o = {
a:10,
b:{
// a:12,
fn:function(){
console.log(this.a); //undefined,对象指向b,b中没有a这个对象
}
}
}
o.b.fn();
例子3:
var o = {
user:"kaikai",
fn:function(){
console.log(this.user); //kaikai
}
}
o.fn(); //调用 fn的对象是 o,所以 this 指向 o
window.o.fn(); //this 指向 o
var c = o.fn;
c(); //this指向window, 因为 将fn函数的地址赋给了 c,c执行的话
构造函数的this:
function Fn(){
this.user = "kaikai";
}
var a = new Fn();
console.log(a.user); //kaikai
//new 关键字改变了this的指向,这个this指向了构建的对象,new关键字会创建一个空的对象,然后会自动调用一个函数apply方法,将this指向这个空对象,这样的话函数内部的this就会被这个空的对象替代。
构造函数中的 this – return 的问题
//如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例(碰到return的情况)
function fn(){
this.user = 'kaikai';
return {};
//return function(){};
}
var a = new fn;
console.log(a.user); //undefined //因为返回的不是对象,所以this没有指向构造的对象
function fn(){
this.user = 'kaikai';
return 1;
//return undefined;
}
var a = new fn;
console.log(a.user); //kaikai
本人菜鸟,如有不对,欢迎评论