老师问下<不好意思视频出了这么久我还提问> 构造函数的属性《例如 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,这是我自己的理解,希望对你有帮助,有错误望老师纠正~
举报