请写出new完对象后,this相关参数的值
<script>
var xuuu = 123;
function test() {
var xuuu = 456;
this.aa = 6666;
return function() {
console.log(xuuu);
console.log(this.aa);
console.log(this.xuuu);
};
};
var sdf=new test();
sdf();
test()();
</script>
正确答案:
sdf()执行结果是 :456,undefined,123
test()执行结果是:456,6666, 123
解析:
这里有两个考点,1是同名全局变量(xuuu)和内部变量的选取;2是this指向的问题
console.log(xuuu),相同名称,函数作用域优先查找最内层的值,所以返回是456
console.log(this.aa)需要重点分析,主要是this的指向。本题中,this出现域有两块,一块是test()的变量this.aa=6666;另一块是test()中return方法的输出值。
调用new test()时,this指向的是调用对象test函数的sdf,但是因为题中return了一个函数,所以这一步执行的结果导致了sdf成为了一个函数对象,(如果此时console.log(sdf.aa)是没有结果的,因为函数对象没有自定义属性。
所以调用sdf()时,this对象是全局对象window,this找不到aa属性,输出undefined
同理,调用test()时,this传入的是window对象,所以打印的是456,6666,123
oo 我居然答对了