<script type=“text/javascript”>
function foo(){
foo.abc = function(){alert(‘def’)}
this.abc = function(){alert(’xyz’)}
abc = function(){alert(‘@@@@@’)};
var abc = function(){alert(‘$$$$$$’)}
}
foo.prototype.abc = function(){alert(‘456′);}
foo.abc = function(){alert(‘123′);}
var f = new foo();
f.abc();
foo.abc();
abc();
</script>
这道题可以帮你温习很多内容(对象、类、原型、作用域、优先级等等),同时部分朋友也能学到很多知识。
首先var f = new foo(),新建了一个foo对象,注意这是个上下文环境中的foo()。
然后我们使用f.abc(),此时程序会查找这个对象的abc()方法,输出xyz, 注意如果找不到就会去f.prototype里找,到那时才会输出456。
到foo.abc()一行,程序会在foo()中找到abc()方法,输出def, 如果找不到会跳出foo() 到外面找到abc ,输出123 。
最后一行abc()。在一个函数中,会预先给 var 关键字定义的局部变量“分配空间”,所以一进入 foo 函数体的时候 abc 已经视为一个局部变量,虽然 abc = function(){alert(’@@@@@’)}; 这行看起来像是定义了一个全局变量,但它还是局部变量。所以在函数体外调用 abc() 理所当然的失败 .在window中找到abc()方法, ie抛错
function foo(){
foo.abc = function(){alert(‘def’)}
this.abc = function(){alert(’xyz’)}
abc = function(){alert(‘@@@@@’)};
var abc = function(){alert(‘$$$$$$’)}
}
foo.prototype.abc = function(){alert(‘456′);}
foo.abc = function(){alert(‘123′);}
var f = new foo();
f.abc();
foo.abc();
abc();
</script>
这道题可以帮你温习很多内容(对象、类、原型、作用域、优先级等等),同时部分朋友也能学到很多知识。
首先var f = new foo(),新建了一个foo对象,注意这是个上下文环境中的foo()。
然后我们使用f.abc(),此时程序会查找这个对象的abc()方法,输出xyz, 注意如果找不到就会去f.prototype里找,到那时才会输出456。
到foo.abc()一行,程序会在foo()中找到abc()方法,输出def, 如果找不到会跳出foo() 到外面找到abc ,输出123 。
最后一行abc()。在一个函数中,会预先给 var 关键字定义的局部变量“分配空间”,所以一进入 foo 函数体的时候 abc 已经视为一个局部变量,虽然 abc = function(){alert(’@@@@@’)}; 这行看起来像是定义了一个全局变量,但它还是局部变量。所以在函数体外调用 abc() 理所当然的失败 .在window中找到abc()方法, ie抛错