代码:
function F(){
function C(){
console.log(this);
return this;
}
return C();
}
var o = new F();
上面的this
指向的是全局对象还是对象o?
怎么理解呢?
代码:
function F(){
function C(){
console.log(this);
return this;
}
return C();
}
var o = new F();
上面的this
指向的是全局对象还是对象o?
怎么理解呢?
这个this 是全局对象,this
在 C
中,主要看C
如果如何调用,而C() 就是一般的函数调用,所以this是window。
http://zonxin.github.io/post/2015/11/javascript-this/
高程3 144页 构造函数 new的过程:
1 创建一个新对象
2 将构造函数的作用域赋给新对象(this就指向了这个新对象)
3 执行构造函数中的代码(为这个新对象添加属性)
4 返回新对象
很显然是全局变量啊
this的指向始终是调用者,因为javascript中this是lazy bind,始终在被调用时才确定this的指向
题主的问题:
在new F()
的时候,C()
确实被执行了,但是C()
是被当作函数调用,而不是方法,也就是调用者是null,
所以this的指向就是window
如果想要指向当前的对象,可以这样:
声明函数的时候
function C(){
console.log(this);
return this;
}.bind(this)
或者在调用函数的时候
C.apply(this);
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答918 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
在函数对象F中定义了函数C
以函数的方式执行C,那么
console.log(this);
this指向全局变量函数C执行后返回了this,并且被F函数返回
var o=new F();
new操作符执行后,o指向了函数对象F返回的,也就是全局变量因为JS引擎有规则,
如果在一个函数作为构造器执行,也就是通过new执行时,没有使用return语句返回,那么new操作符就会返回这个构造函数的实例对象。
如果有使用return语句并且返回的值为非对象的-基本类型,那么依旧以构建的实例对象作为new操作的结果返回
如果有使用return语句并且返回的值为对象的-非基本类型,那么以次对象作为new操作的结果返回
给个例子
此时的o就为F的实例对象
console.log(o.name);//输出结果为 I am created by F
此时的o就为函数C返回的对象
console.log(o.name);//输出结果为 I'm created by C