老师问下<不好意思视频出了这么久我还提问> 构造函数的属性《例如 this.name是怎么预编译的》?
var foo = 1;
function main (){ console.log(foo); var foo = 2; function foo (){ console.log(foo); } console.log(this.foo); this.foo = 3; console.log(this.foo); }
main();
new main();
var foo = 1;
function main (){ console.log(foo); var foo = 2; function foo (){ console.log(foo); } console.log(this.foo); this.foo = 3; console.log(this.foo); }
main();
new main();
2016-09-11
剖析仅使用new main();的情况:
代码运行前首先创建全局上下文环境(按照课程说明先查询函数后查询变量)
[global] = { main:function, foo:undefined this:window }
运行时从上到下执行赋值语句:
[global] = { main:function, foo:1 this:window }
跳过main函数中的内容直接执行到new main();代码运行前首先创建函数上下文环境
[main] = { foo = function this:new Object() }
由于var foo...与function foo()...同名,根据课程所述忽略变量foo
运行时从上到下执行赋值语句:
[main] = { foo:2 this:new Object() }
由于this中没有属性foo,console.log(this.foo)自然为undefined。若有误,望指正。
我不清楚楼上怎么理解为function foo()被提前的.....
var foo = 1;
function main (){
console.log(foo); // function foo ()
var foo = 2;
function foo (){
console.log(foo);
}
console.log(this.foo); // main();时为1 new main();时为undefined
this.foo = 3;
console.log(this.foo); // 3
}
main();
new main();
当用new来构造函数时,this的指向是 new main()的原型main();,this.foo就是main()中的function foo(),而变量申明var foo = 2;因为和function foo()重复,就会被忽略,在执行上下文时function foo ()会被提前,值暂时为undefined,所以console.log(this.foo);会返回undefined,这是我自己的理解,希望对你有帮助,有错误望老师纠正~
举报