首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

js可以这样用(二)

2012-10-09 
js可以这么用(二)? 看到别人在讨论js的call,忍不住记下一笔,call的意思是改变被调用函数的当前指针,用法如

js可以这么用(二)

? 看到别人在讨论js的call,忍不住记下一笔,call的意思是改变被调用函数的当前指针,用法如下

?

       var name="全局阿飞";       function myafei(){this.name="阿飞对象"}       function funX(){alert(this.name)}               funX();               funX.call(window);               funX.call(new myafei());               funX.call(document.getElementById("afeiinput"));//注:默认的调用对象就是window,所以前两种调用方式结果一样,而后面两个,//调用的对象分别改成 myafei和页面表单对象,所以打出的值是不同的。
? <input type="text" id="afeiinput" name="afeiinput" value="阿飞表单" />

?

最后的结果是:全局阿飞,全局阿飞,阿飞对象,afeiinput。

?

在java中,我们经常通过实现接口(或者继承类)来重构代码,通过传入不同的对象,来调用不同的方法,我觉得这里应该也可以达到类似的作用,下面我们做个试验。

?

我们现在假如有这样一个场景,就是根据传入的动物的不同来调用不同的eat方法。

代码如下:

/*声明全局对象或者函数*/function eat(){alert("我要吃")};/*声明一个猪对象*/function pigeat(){  this.eat=function(){    alert("我要吃猪草");  }}/*声明一个狗对象*/function dogeat(){  this.eat= function(){    alert("我要吃骨头");  }}var pig=new pigeat();//pig.eat();var dog=new dogeat();//dog.eat();/*适配调用方法*/function starteat(){ this.eat();}starteat();starteat(window);starteat.call(pig);starteat.call(dog);

??

? 重点是最后starteat放入,根据传入不同的对象,就调用了不同方法里面的结果,结果是:我要吃,我要吃,我要吃猪草

 ,我要吃骨头。

 假如需要扩展了,直接加一个动物,实现eat方法,然后传进去就ok了。当然在starteat里面还可以做更多的处理,以实现通用。

?

?

?

热点排行