js的this指向之new绑定

150 阅读1分钟

这篇笔记用于记录用new关键字创建的实例对象中this的指向问题

1.无返回值的情况

原函数没有返回值时,用new关键字来执行函数,相当于构造函数实例化对象,this指向当前的实例化对象

function fn(){
    console.log(this);  
}
var myFn = new fn();
console.log(fn);        // fn{},fn{}

2.返回一个对象

当原函数返回一个对象时,实例化出来的对象myFn指向fn返回的那个对象

function fn(){
    console.log(this);		
    return {name:'yoyo'}
}
var myFn = new fn();
console.log(fn);        // fn{},{name:'yoyo'}

3.其他情况

var person = {
    fav: function(){
        return this;
    }
}
// 这里以person下的属性fav为原型对象创建实例对象p
var p = new person.fav();
console.log(p.__proto__ === person.fav.prototype);  // true
console.log(p);                                     // fav

关于严格模式下的this指向:

  • 独立调用的函数内部的this指向undefined
  • apply()和call()调用的函数内部this始终是他们的第一个参数