<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抛错
本文通过一个具体的JavaScript代码示例,详细解析了对象、类、原型、作用域及方法优先级等概念。理解这些内容对于深入掌握JavaScript编程至关重要。

被折叠的 条评论
为什么被折叠?



