1. 首页
  2. IT资讯

JavaScript中方法的覆盖问题

“u003Cdivu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp9.pstatp.comu002Flargeu002Fpgc-imageu002Fbf0e68bc44b24fbaae3f118a367b2304″ img_width=”480″ img_height=”260″ alt=”JavaScript中方法的覆盖问题” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E对于很多刚从Java学习过渡到JavaScript学习的同学来说在定义方法的问题上最头疼,我们Java人员来学习JavaScript是非常容易上手的,因为语法大部分都相同。但是定义方法是个例外,JavaScript中没有方法重载的概念,匹配方法只去比较方法名,这跟Java大相径庭。今天我们来剖析一下这个问题, 既然JavaScript中没有重载的概念,那么我们定义两个方法名相同的方法,会出现什么问题呢?u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E<script >u003Cu002Fpu003Eu003Cpu003Efunction calc(a , b){u003Cu002Fpu003Eu003Cpu003Ealert(a + b);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc(1,2);u003Cu002Fpu003Eu003Cpu003Efunction calc() {u003Cu002Fpu003Eu003Cpu003Ealert(“空参方法”);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc();u003Cu002Fpu003Eu003Cpu003E<u002Fscript>u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E这里一执行会弹出两个空参方法,而不是一个3和一个空参方法。u003Cu002Fpu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F4c3e4c10735b4362b70bd38621eb2cf5″ img_width=”457″ img_height=”136″ alt=”JavaScript中方法的覆盖问题” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E这是因为在JavaScript中如果定义的方法名相同,下面的会将上面的覆盖掉。u003Cu002Fpu003Eu003Cpu003E以上是具名方法声明的方法,我们如果用具名和匿名方法分别声明相同的方法名的方法会是一种什么样的情况呢?u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E<script >u003Cu002Fpu003Eu003Cpu003Efunction calc(a , b){u003Cu002Fpu003Eu003Cpu003Ealert(a + b);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc(1,2);u003Cu002Fpu003Eu003Cpu003Evar calc = function(){u003Cu002Fpu003Eu003Cpu003Ealert(“空参方法”);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc();u003Cu002Fpu003Eu003Cpu003E<u002Fscript>u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cpu003E出乎我们意料,竟然弹了个3又弹了个空参方法,好像互相不影响。u003Cu002Fpu003Eu003Cpu003E那请看下面这种情况:u003Cu002Fpu003Eu003Cblockquoteu003Eu003Cpu003E<script >u003Cu002Fpu003Eu003Cpu003Efunction calc(a , b){u003Cu002Fpu003Eu003Cpu003Ealert(a + b);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc(1,2);u003Cu002Fpu003Eu003Cpu003Evar calc = function(){u003Cu002Fpu003Eu003Cpu003Ealert(“空参方法”);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc();u003Cu002Fpu003Eu003Cpu003Efunction calc(a , b){u003Cu002Fpu003Eu003Cpu003Ealert(a – b);u003Cu002Fpu003Eu003Cpu003E}u003Cu002Fpu003Eu003Cpu003Ecalc(1,2);u003Cu002Fpu003Eu003Cpu003E<u002Fscript>u003Cu002Fpu003Eu003Cu002Fblockquoteu003Eu003Cdiv class=”pgc-img”u003Eu003Cimg src=”http:u002Fu002Fp1.pstatp.comu002Flargeu002Fpgc-imageu002F8228816c7a5f4e97ae41c5029096c15e” img_width=”460″ img_height=”144″ alt=”JavaScript中方法的覆盖问题” inline=”0″u003Eu003Cp class=”pgc-img-caption”u003Eu003Cu002Fpu003Eu003Cu002Fdivu003Eu003Cpu003E为什么会是这样一个顺序呢?第三个方法会将第一个方法覆盖掉,这个现象大家能理解。 但为什么第二个方法会将第三个方法覆盖掉呢?u003Cu002Fpu003Eu003Cpu003E是因为匿名方式声明的方法。只有在调用的时候才真正的被加载上。而具名方法在加载之前就会将相同的方法覆盖掉。所以在加载之前第三个方法会将第一个方法覆盖掉。所以先弹出了一个”-1″u002F接着执行到了匿名方法。也就是第二个方法。这时候这个方法才加载到内存中。所以会将已经加载好的第三个方法覆盖掉。u003Cu002Fpu003Eu003Cpu003E推荐学习视频:u003Ca class=”pgc-link” href=”http:u002Fu002Fyun.itheima.comu002Fcourseu002F140.html?stt” target=”_blank”u003EJavaScript教程_JavaScript视频教程|黑马程序员u003Cu002Fau003Eu003Cu002Fpu003Eu003Cu002Fdivu003E”

原文始发于:JavaScript中方法的覆盖问题

主题测试文章,只做测试使用。发布者:玩家L-,转转请注明出处:http://www.cxybcw.com/26886.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code