<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-295  評論-26  文章-1  trackbacks-0
    javascript的繼承機制并不是明確規定的,而是通過模仿實現的,意味著繼承不是由解釋程序處理,開發者有權決定最適合的繼承方式. 下面我給出幾種常用的方法: 1 .對象冒充 原理: 構造函數使用this關鍵字給所有屬性和方法賦值, 因為構造函數只是一個函數,所以可以使ClassA的構造函數成為classB的方法,然后調用它.這樣classB就會收到classA的構造函數中定義的屬性和方法.例子: function classA(name) { this.name=name; this.showName=function(){alert(this.name);} } function classB(name) { this.newMethod = classA; this.newMethod(name); } obj = new classA("hero"); objB = new classB("dby"); obj.showName(); // print hero objB.showName(); // print dby 說明classB 繼承了classA的方法. 對象冒充可以實現多重繼承 例如 function classz(){ this.newMethod = classX; this.newMethod(); delete this.newMethod; this.newMethod=classY; this.newMethod(): delete this.newMethod; } 但是如果classX和classY有相同的屬性或者方法,classY具有高優先級. 2.call()方法 call方法使與經典的對象冒充法就相近的方法,它的第一個參數用作this的對象,其他參數都直接傳遞給函數自身. function sayName(perfix) { alert(perfix+this.name); } obj= new Object(); obj.name="hero"; sayName.call(obj,"hello," ); function classA(name) { this.name=name; this.showName=function(){alert(this.name);}; } function classB(name) { classA.call(this,name); } objB = new classB("bing"); objB.showName();////說明classB繼承classA的showName方法 3.apply()方法 aplly()方法有2個參數,一個用作this對象,一個使傳遞給函數的參數數組. function sayName(perfix) { alert(perfix+this.name); } obj= new Object(); obj.name="hero"; sayName.aplly(obj,new Array("hello,") ); 4. 原型鏈 prototype對象的任何屬性和方法都會被傳遞給對應類的所有實例,原型鏈就是用這種方式來顯現繼承. function classA (){} classA.prototype.name="hero"; classA.prototype.showName=function(){alert(this.name)} function classB(){} classB.prototype=new classA(); objb = new classB() objb.showName();//print hero 說明b繼承了a的方法 這里需要注意 調用classA的構造函數時,沒有給它傳遞參數,這是原型鏈的標準做法,確保函數的構造函數沒有任何參數. 并且 子類的所有屬性和方法,必須出現在prototype屬性被賦值后,應為在它之前賦的值會被刪除.因為對象的prototype屬性被替換成了新對象,添加了新方法的原始對象將被銷毀. 5 混和方式 就是用冒充方式 定義構造函數屬性,用原型法定義對象方法. function classA(name) { this.name=name; } classA.prototype.showName=function(){alert(this.name)} function classB(name) { classA.call(this,name); } classB.prototype = new classA(); classB.prototype.showName1=function(){alert(this.name+"*****");}; obj = new classB("hero"); obj.showName(); obj.showName1(); 在classB的構造函數中通過調用call方法 繼承classA中的name屬性,用原型鏈來繼承classA的showName方法.

    大盤預測 國富論
    posted on 2009-07-16 13:47 華夢行 閱讀(117) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲欧美中文日韩视频| 亚洲伦另类中文字幕| 精品国产日韩久久亚洲| 免费毛片a在线观看67194| 亚洲成A∨人片在线观看无码| 最近中文字幕无免费| 337p日本欧洲亚洲大胆精品555588| 另类免费视频一区二区在线观看| 久久亚洲国产精品一区二区| 国内精品99亚洲免费高清| 国产亚洲成av人片在线观看| 精品视频一区二区三区免费| 亚洲视频2020| 黄页免费的网站勿入免费直接进入| 亚洲高清中文字幕免费| 日本免费中文字幕在线看| 日本永久免费a∨在线视频| 亚洲美女又黄又爽在线观看| 久久精品视频免费看| 亚洲一级高清在线中文字幕| 毛片免费全部免费观看| 色窝窝亚洲AV网在线观看| 亚洲国产精品人人做人人爽| 日本不卡免费新一区二区三区| 久久狠狠高潮亚洲精品| 国产精品无码免费播放| 青青青视频免费观看| 亚洲成色WWW久久网站| 亚洲免费视频网站| 国产成人精品亚洲2020| 亚洲av片一区二区三区| 久久青草免费91观看| 亚洲欧洲精品成人久久曰| 久久乐国产精品亚洲综合| 99视频免费观看| 亚洲av成人一区二区三区观看在线| 在线精品亚洲一区二区三区| 亚洲免费福利视频| 美女露100%胸无遮挡免费观看| 亚洲国产精彩中文乱码AV| 成人毛片18女人毛片免费视频未|