代码如下:
<html>
<body>
<script type="text/javascript">
var a = new Object();
a.f1=function tt(){
this.b="hello";
alert(this.b);
};
a.f1();
</script>
</body>
</html>代码可以打印hello。我的问题是,对象a的方法f1中调用了alert方法,我们知道alert是window对象的方法,可是f1并没有window.alert(this.b)这样调用啊,
按理说,f1中直接写alert(),应该是在查找对象a是否包含此方法,而不是去调用window对象的方法?
上面的代码是什么原因呢?
<html>
<body>
<script type="text/javascript">
var a = new Object();
a.f1=function tt(){
this.b="hello";
alert(this.b);
};
a.f1();
</script>
</body>
</html>代码可以打印hello。我的问题是,对象a的方法f1中调用了alert方法,我们知道alert是window对象的方法,可是f1并没有window.alert(this.b)这样调用啊,
按理说,f1中直接写alert(),应该是在查找对象a是否包含此方法,而不是去调用window对象的方法?
上面的代码是什么原因呢?
估计楼主把它跟对象的继承搞混了var value = 'test'
var a = new Object(); a.f1=function tt(){
this.b="hello";
alert(value);
};
a.f1(); a.f1中可以直接用变量value,跟a.f1中可以直接用alert方法是一个道理
window是默认对象。可以省略
访问的时候实际是 取 window.a的值 ok了 结贴吧
它的方法也就是全局函数。
JS中属性方法的作用域都是靠作用域链实现的
变量会一级一级的从作用域链往上找,直到找到Window对象
楼主正好遇到了个特殊情况,就是JS中Window对象可以省略不写的。
window是顶级对象,是默认的对象。
楼主可以试试confirm,open等方法就明白了。
<div id="ee"></div>
<script>
function outer(){
function alert(){
document.getElementById('ee').innerText = 'alert in inner.';
}
function inner(){
function alert(){
document.getElementById('ee').innerText = 'alert in inner.';
}
alert();
}
inner();
}
outer();
</script>
</body>
alert(this.b); 其实是没明白你这段代码的用意。首先你并没有定义任何对象的alert方法,也没对window.alert进行重定义;其次你对this.b赋值然后直接打印出来,那无论this是window还是你定义的对象,这个hello肯定都会打印出来,不会有问题。一开始还以为你是对this指针漂移产生的疑惑,现在没法帮你什么了,我也迷惑了,呵呵,你想问啥~