日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

我对一个js问题的分析

發(fā)布時(shí)間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我对一个js问题的分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
qq空間好慢,把我的幾個(gè)文章拿過來: ? ? 題目如下:
<script>
function foo(){
??foo.abc = function(){alert('def')}
??this.abc = function(){alert('xyz')}
??abc = function(){alert(
'@@@@@')};
??var abc = function(){alert('$$$$$$')}
}
foo.prototype.abc = function(){alert('456');}
foo.abc = function(){alert('123');}
var f = new foo();
f.abc();
foo.abc();
abc();
</script>
問題來自: 中國狐(
[url]www.foxjs.cn[/url]) 詳細(xì)出處參考:[url]http://www.foxjs.cn/article.asp?id=607[/url]


我的分析結(jié)果----->
不運(yùn)行看看什么結(jié)果,分析下
1.采用逐步擴(kuò)展變量的方法分析:
看這個(gè):
<script>
abc = function(){alert('@@@@@')};-----其實(shí)這里等價(jià)于window.abc=function(){alert('@@@@@')};一個(gè)賦值語句
abc();-----其實(shí)這里等價(jià)于window.abc();
</script>
結(jié)果肯定是@@@@@了。
2.放到函數(shù)里面賦值
<script>
function foo()
{
abc = function(){alert('@@@@@')};
}
abc();
</script>
在執(zhí)行foo();之前是什么也不會(huì)輸出的,因?yàn)檫€沒有對abc賦值,也就是函數(shù)引用為null
如果這樣,
<script>
function foo()
{
abc = function(){alert('@@@@@')};
}
foo();//函數(shù)執(zhí)行了賦值語句
abc();
</script>
就會(huì)輸出@@@@@了。
3.看看構(gòu)造函數(shù)
function foo()
{
this.abc = function(){alert('xyz')}------有了this就成為了構(gòu)造函數(shù)
abc = function(){alert('@@@@@')};--window.abc
}
foo();//產(chǎn)生一個(gè)匿名對象?然后銷毀?
abc();
</script>
上面只是當(dāng)作了普通的函數(shù)執(zhí)行了賦值語句。
結(jié)果:@@@@@
再看如下:
<script>
function foo()
{
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
}
var f=new foo();
f.abc();---this指向了f
abc();---window.abc()
</script>
結(jié)果:xyz?? @@@@@

再看
<script>
function foo()
{
foo.abc=function(){alert('def');};---對比下window.abc=function{alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
}
var f=new foo();
f.abc();
foo.abc();---這里類似window.abc();
abc();
</script>
結(jié)果:xyz?? def?? @@@@@
4.
<script>
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}--添加了個(gè)局部作用域的abc在foo()函數(shù)內(nèi)部會(huì)覆蓋
---例如在這里調(diào)用abc()會(huì)執(zhí)行局部的函數(shù)
}
var f=new foo();
f.abc();
foo.abc();
abc();
</script>
結(jié)果和上面的相同。
看下面的:
<script>
foo.abc = function(){alert('123');}---在調(diào)用new foo()之前賦值會(huì)在后面被重寫
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
}
var f=new foo();
f.abc();
foo.abc();
abc();
</script>
結(jié)果還是一樣。
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
}
var f=new foo();
foo.abc = function(){alert('123');}---但是在new foo()調(diào)用之后,而foo.adb()調(diào)用之前重寫函數(shù),結(jié)果受影響
f.abc();
foo.abc();
abc();
</script>
結(jié)果:xyz??123??@@@@@
5.原型對象prototype
<script>
function foo()
{
}
foo.prototype.abc = function(){alert('456');}
var f=new foo();
f.abc();
</script>
結(jié)果:456
雖然foo()內(nèi)部沒有明確的定義方法abc()但是我們發(fā)現(xiàn)好像foo類定義了一個(gè)abc()方法似的。---等于我們?yōu)閒oo類的父類添加了一個(gè)可繼承的方法
下面重寫方法覆蓋父類中的方法
<script>
function foo()
{
this.abc = function(){alert('xyz')}
}
foo.prototype.abc = function(){alert('456');}
var f=new foo();
f.abc();
</script>
結(jié)果:xyz

轉(zhuǎn)載于:https://blog.51cto.com/xcf007/101048

總結(jié)

以上是生活随笔為你收集整理的我对一个js问题的分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。