在以下代码中:
<script type="text/javascript">
var i = 10;
function Circle(radius) {
this.r = radius;
this.i = radius;
}
Circle.i = 123;
Circle.prototype.area = function() { alert(i); }
var c = new Circle(1);
var a = c.area();
</script>
什么被警告?答案在这个问题的最后。
我发现i
警报调用中的 要么是指任何本地(如果有),要么是全局变量。即使没有定义局部变量和全局变量,也不可能是实例变量或类变量。要引用实例变量i
,我们需要this.i
,而要引用类变量i
,我们需要Circle.i
。这对几乎所有面向对象的编程语言来说都是真的吗?有什么例外吗?有没有局部没有全局的情况下,先查找实例变量,再查找类变量作用域?(或者在这种情况下,那些称为范围?)
答案是:10 正在收到警报。