这篇笔记用于记录用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始终是他们的第一个参数