请问这个是什么原理? function a(){ this.value="a";}function b(){ this.value="b"; a(); alert(this.value);}b()为什么输出来的是a呢,这个是继承呢,还是内部变量的修改? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这里的a、b都是函数,并未构成对象,也就无从谈论所谓“继承”。new出来的才是对象。new操作符会创建一个对象,将构造函数的prototype对象的方法拷贝一份到创建的对象上,并且将this指向创建的对象。这里a、b只是单纯的函数操作,函数里面的变量会先查找局部变量,局部中未找到this,就向上查找,如果b()位于全局环境,那么this应该指向window。 单纯的函数调用,this是当前操作的对象 <script language="javascript">function a(){this.value="a";}function b(){this.value="b";alert(this.value);a();alert(this.value);}b()</script>测试了哈的确如楼上们所说 对,alert(window.value)也是打印出a有种说法是javascrip的所有的东西都是对象,函数调用时,也会创建一个对象,对不对? 关键在this搞清楚this是什么 就没什么疑问了另外你这段代码的写法是没意义的代码是为了需求存在的 不要在这样的代码上浪费时间 this 永远指向当前函数的调用者function a(){this.value="a";}function b(){this.value="b";alert(this.value);a();alert(this.value);}用 xx.b()这种调用的话,调用对象是xx,b内部的this就是xx, 而b() 执行b函数,没有调用者,或者说调用者就是 window,里面的this指向window, this.value="b"之后 window就多了个value属性, 同理调用a()时候也是修改的 window.value <script>function f1(){ this.value="f1"; alert(this.value);}function f2(){ this.value="f2"; alert(this.value);}function f3(){ this.value="f3"; var m=new f1();//f1里的this就是m,this.value就是对象m里的value n=f2();//这里是函数调用,f2里的this就是window alert(this.value);}var c=new f3();//f3里的this就是calert(c.value);alert(window.value)</script>这是我自己写的,有点明白了,谢谢 我没看出这段代码有实现继承的目的 我只看出他要考量你对this的理解另外请问你所谓的机制是什么东东 1楼说的很正确。这里并未涉及对象继承的问题。楼主代码中的this实际上指向的window对象(global对象),因此几次赋值操作都是在给window.value赋值。如果这不是楼主想要的结果,请楼主先去了解一下 b()跟 new b()的区别。 js中对象赋值的问题 请教各位大哥一个JAVASCRIPT的数组排序问题!谢谢啦 一个很不错的跨Frame多层下拉菜单,JavaScript+Div js去空字符串的办法 为什么 $("#divId").offset().top返回值为window类型 怎样在一个页面里控制其它页面的窗体对象? 如何判断某个页面已经打开? <span>标签的问题 浏览器检测问题:可是“腾讯浏览器”也绕过了我的检查。 请问 JavaScript 如何实现这样的功能? 问个简单问题? 重写window alert方法遇到的一个问题,请大师指教
new出来的才是对象。
new操作符会创建一个对象,将构造函数的prototype对象的方法拷贝一份到创建的对象上,并且将this指向创建的对象。
这里a、b只是单纯的函数操作,函数里面的变量会先查找局部变量,局部中未找到this,就向上查找,如果b()位于全局环境,那么this应该指向window。
function a()
{
this.value="a";
}
function b()
{this.value="b";
alert(this.value);
a();
alert(this.value);
}b()
</script>测试了哈
的确如楼上们所说
函数调用时,也会创建一个对象,对不对?
搞清楚this是什么 就没什么疑问了另外你这段代码的写法是没意义的
代码是为了需求存在的 不要在这样的代码上浪费时间
function a()
{
this.value="a";
}
function b(){
this.value="b";
alert(this.value);
a();
alert(this.value);
}用 xx.b()这种调用的话,调用对象是xx,b内部的this就是xx, 而b() 执行b函数,没有调用者,或者说调用者就是 window,里面的this指向window, this.value="b"之后 window就多了个value属性, 同理调用a()时候也是修改的 window.value
function f1()
{
this.value="f1";
alert(this.value);
}function f2()
{
this.value="f2";
alert(this.value);
}
function f3()
{
this.value="f3";
var m=new f1();//f1里的this就是m,this.value就是对象m里的value
n=f2();//这里是函数调用,f2里的this就是window
alert(this.value);
}
var c=new f3();//f3里的this就是c
alert(c.value);
alert(window.value)
</script>
这是我自己写的,有点明白了,谢谢
我没看出这段代码有实现继承的目的 我只看出他要考量你对this的理解
另外请问你所谓的机制是什么东东
这里并未涉及对象继承的问题。
楼主代码中的this实际上指向的window对象(global对象),因此几次赋值操作都是在给window.value赋值。
如果这不是楼主想要的结果,请楼主先去了解一下 b()跟 new b()的区别。