小議Function.apply() 之一------(函數(shù)的劫持與對(duì)象的復(fù)制)
更新時(shí)間:2006年11月30日 00:00:00 作者:
關(guān)于對(duì)象的繼承,一般的做法是用復(fù)制法: Object.extend
見protpotype.js 的實(shí)現(xiàn)方法:
除此以外,還有一種不太常見的方法: Function.apply.
apply 方法能劫持(<<Ajax in Action>> 書中用到"劫持"一語,很生動(dòng)啊)另外一個(gè)對(duì)象的方法,
繼承另外一個(gè)對(duì)象的屬性。
示范代碼如下:
Apply示范代碼
所有屬性。 在 Print.apply(this,arguments) 后就自動(dòng)得到了 show() 方法。
本文,作為拋磚引玉,只對(duì) apply 的用法(在對(duì)象繼承和函數(shù)劫持方面)做個(gè)小示范,其他更深入的應(yīng)用要
靠大家慢慢去領(lǐng)會(huì)了。
見protpotype.js 的實(shí)現(xiàn)方法:
復(fù)制代碼 代碼如下:
Object.extend = function(destination, source) {
for (property in source) {
destination[property] = source[property];
}
return destination;
}
for (property in source) {
destination[property] = source[property];
}
return destination;
}
除此以外,還有一種不太常見的方法: Function.apply.
apply 方法能劫持(<<Ajax in Action>> 書中用到"劫持"一語,很生動(dòng)啊)另外一個(gè)對(duì)象的方法,
繼承另外一個(gè)對(duì)象的屬性。
示范代碼如下:
Apply示范代碼
復(fù)制代碼 代碼如下:
<script>
function Person(name,age){ //定義一個(gè)類,人類
this.name=name //名字
this.age=age //年齡
this.sayhello=function(){alert("hello")}
}
function Print(){ //顯示類的屬性
this.funcName="Print"
this.show=function(){
var msg=[]
for(var key in this){
if (typeof(this[key])!="function") msg.push([key,":",this[key]].join(""))
}
alert(msg.join("\n"))
}
}
function Student(name,age,grade,school){ //學(xué)生類
Person.apply(this,arguments)
Print.apply(this,arguments)
this.grade=grade //年級(jí)
this.school=school //學(xué)校
}
var p1=new Person("jake",10)
p1.sayhello()
var s1=new Student("tom",13,6,"清華小學(xué)")
s1.show()
s1.sayhello()
alert(s1.funcName)
</script>
學(xué)生類本來不具備任何方法,但是在 Person.apply(this,arguments) 后,他就具備了 Person類的sayhello方法和 function Person(name,age){ //定義一個(gè)類,人類
this.name=name //名字
this.age=age //年齡
this.sayhello=function(){alert("hello")}
}
function Print(){ //顯示類的屬性
this.funcName="Print"
this.show=function(){
var msg=[]
for(var key in this){
if (typeof(this[key])!="function") msg.push([key,":",this[key]].join(""))
}
alert(msg.join("\n"))
}
}
function Student(name,age,grade,school){ //學(xué)生類
Person.apply(this,arguments)
Print.apply(this,arguments)
this.grade=grade //年級(jí)
this.school=school //學(xué)校
}
var p1=new Person("jake",10)
p1.sayhello()
var s1=new Student("tom",13,6,"清華小學(xué)")
s1.show()
s1.sayhello()
alert(s1.funcName)
</script>
所有屬性。 在 Print.apply(this,arguments) 后就自動(dòng)得到了 show() 方法。
本文,作為拋磚引玉,只對(duì) apply 的用法(在對(duì)象繼承和函數(shù)劫持方面)做個(gè)小示范,其他更深入的應(yīng)用要
靠大家慢慢去領(lǐng)會(huì)了。
相關(guān)文章
使用 electron 實(shí)現(xiàn)類似新版 QQ 的登錄界面效果(陰影、背景動(dòng)畫、窗體3D翻轉(zhuǎn))
這篇文章主要介紹了使用 electron 實(shí)現(xiàn)類似新版 QQ 的登錄界面效果(陰影、背景動(dòng)畫、窗體3D翻轉(zhuǎn)),其實(shí)主要用到的就是 CSS3 的效果:邊框圓角、陰影,3D變換,實(shí)現(xiàn)代碼超級(jí)簡單,需要的朋友可以參考下2018-10-10JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的方法小結(jié)
這篇文章主要給大家介紹了關(guān)于JS從非數(shù)組對(duì)象轉(zhuǎn)數(shù)組的一些方法,分別是Array.prototype.slice.call(obj)、Array.from(obj)、[…obj]和Object.values(obj)等方法的詳細(xì)實(shí)現(xiàn)方法,需要的朋友可以參考下。2018-03-03深入理解JavaScript 中的匿名函數(shù)((function() {})();)與變量的作用域
匿名函數(shù)沒有實(shí)際名字的函數(shù),匿名函數(shù)(function() {})();是一個(gè)特殊的閉包寫法。本文蛀牙給大家介紹JavaScript 中的匿名函數(shù)((function() {})();)與變量的作用域,需要的朋友可以參考下2018-08-08JS實(shí)現(xiàn)iframe中子父頁面跨域通訊的方法分析
這篇文章主要介紹了JS實(shí)現(xiàn)iframe中子父頁面跨域通訊的方法,結(jié)合實(shí)例形式分析了JS實(shí)現(xiàn)iframe頁面跨域通訊常見操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-03-03js純前端實(shí)現(xiàn)騰訊cos文件上傳功能的示例代碼
這篇文章主要介紹了vue純前端實(shí)現(xiàn)騰訊cos文件上傳功能的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05全面接觸神奇的Bootstrap導(dǎo)航條實(shí)戰(zhàn)篇
導(dǎo)航條(navbar)在Bootstrap中是一個(gè)獨(dú)立組件,導(dǎo)航條(navbar)和導(dǎo)航(nav)在Bootstrap中是有明顯區(qū)別的,本文全面接觸神奇的Bootstrap導(dǎo)航條,感興趣的小伙伴們可以參考一下2016-08-08微信小程序監(jiān)聽用戶登錄事件的實(shí)現(xiàn)方法
這篇文章主要介紹了微信小程序監(jiān)聽用戶登錄事件的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11