天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JS類定義原型方法的兩種實現的區別評論很多

我們知道,給JavaScript類添加原形(prototype)方法是很簡單的。而且常用的有下面這兩種方法,可是這兩種方法在使用時有區別嗎? 
    JScript Class: 
復制代碼 代碼如下:
 function JSClass() 
 {       
 } 

    Extends prototype method: 
復制代碼 代碼如下:
 JSClass.prototype.MethodA = function() 
 { 

 }; 

    Or 
 復制代碼 代碼如下:
function = JSClass.prototype.MethodA() 
 { 

 };

# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
我先來說一個簡單的區別:這兩個方法導入的原型方法,第一個是一個匿名方法;第二個方法有方法名"JSClass.prototype.MethodA"。 
2005-03-01 10:52 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
<BODY> 
<script> 
function JSClass() 



function = JSClass.prototype.MethodA() 


}; 
</script> 
</BODY> 

提示出錯乜。 
2005-03-01 13:51 | 阮 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
faint,我發現FreeTextBox修改少量數據(一兩個字符)提交有時會沒有效果:( 
我那個是手誤多寫了個"=",可是我記得我修改過了的。 
2005-03-01 14:00 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
     其實這兩個原形定義方式可以簡化一下來討論,先把它們看作是兩個函數,如下:
  Foo1(); 

  function Foo1() 
  { 
      alert('This is Foo1.'); 
  }
     和   Foo2(); 
  var Foo2 = function() 
  { 
      alert('This is Foo2.'); 
  }

     運行第一個顯然是不會有任何錯誤的,可是運行第二個就有問題了,這時系統會說:Microsoft JScript runtime error: Object expected。這就是說函數定義(Foo1)在腳本解析器中有最高的初始化優先級,這個很好理解。如果不優先處理函數,那么對于函數中的函數調用就沒有辦法處理了,假使我們先定fn1()再定義fn2(),卻從fn1中調fn2,那么就通不過解析了。為什么Foo2不能被初始化,Foo2的定義根本不是函數定義,它是一個標準的賦值語句,之所以能象標準函數一樣的使用Foo2(Foo2()),完全是因為它指向的是一個函數對象的實例而已。

2005-03-03 22:17 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
     再來看原形方法導入里的兩種方式,就很簡單了。并且不同的執行優先循序,也決了它們在使用中的不同,看如下示例:
<script language="Javascript">
function NormalClass() 

    this.m_Property1 = 'P1 in Normal Class.'; 
    this.m_Property2 = 'P2 in Normal Class.'; 

    this.toString = function() 
    { 
         return '[class NormalClass]'; 
    }

    return new InnerClass();   

    function InnerClass() 
    { 
         this.m_Property1 = 'P1 in Inner Class.';  
         this.m_Property2 = 'P2 in Inner Class.';  

         this.toString = function() 
         { 
              return '[class InnerClass]'; 
         }     
    }

    InnerClass.prototype.Method1 = function() 
    { 
         alert(this.m_Property1); 
    }; 

    function InnerClass.prototype.Method2() 
    { 
         alert(this.m_Property2); 
    };   
}
</script>

     執行: 
var nc = new NormalClass(); 
nc.Method1(); 
nc.Method2();

     是什么效果?為什么? 


2005-03-03 22:21 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
最后結果居然是nc.Method1()沒有定義,nc.Method2()運行正常。
其實不奇怪了,InnerClass.prototype.Method1 = function()依賴于賦值語句的執行,而 function InnerClass.prototype.Method2() 以最高優先級被腳本引擎初始化。 
2005-03-05 02:43 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
我在Antechinus JavaScript Editor測試你的代碼在: 

function InnerClass.prototype.Method2()報錯, 

SyntaxError:missing( before formal parameters See: .prototype.Method2( 
2005-05-10 17:11 | Error 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
@Error 
用IE來試過嗎? 
2005-05-10 17:30 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
我用FF也是一樣的報錯: missing( before formal parameters See: .prototype.Method2( 
2006-08-19 22:40 | jzz 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
return new InnerClass(); 把這行移到 
function InnerClass.prototype.Method2() 

alert(this.m_Property2); 
}; 
后面ie執行正常.FF報錯: missing( before formal parameters See: .prototype.Method2( 
ie是安順序執行下來的,而NS系列不是! 
FF在執行到function InnerClass.prototype.Method2() 這個的時候它根本不知道有這個InnerClass類,自然就不能無緣無故的來個prototype.xxx的東東 
2006-11-13 00:57 | Doutu 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
@Doutu 
把return new InnerClass();放到function InnerClass.prototype.Method2()這個方法之后,就完全違背了我編寫這個示例的初衷。這個示例恰好說明了,IE對function foo()這種函數定義格式有較高的解析優先級,而foo = function()只是一個普通的賦值語句。至于ff中的情況我沒有研究過,既然你說ff找不到return后的InnerClass,那么就說明是順序的解析function foo()這種還屬定義格式的。 
2006-11-13 01:29 | birdshome 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
唉。可憐的只會用ie的人呀。 function x.y.z() {} 的寫法根本就是不標準的寫法,只有ie支持,其他js引擎中如ff或opera都會報錯。符合標準的寫法只有 x.y.z = function () {};

當然,就語法層面來說,我挺喜歡這種寫法的,希望以后的標準能采納這種寫法。 
2006-11-28 11:04 | hax 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
呵呵 hax說得對啊。 只有ie才會像媽媽一樣包容孩子的各種錯誤 

標準的寫法只有 x.y.z = function () {}; 

其實,ie還支持更詭異的寫法。 

看看這個 
function window::onload(){ 
alert("go_rush") 

2006-11-28 14:39 | Go_Rush 
# re: JS類定義原型方法的兩種實現的區別  回復  更多評論    
@hax 
標準再好,也是為人服務的,爭論這個是學院派和工程派之間的事情,我們實現好我們自己系統就可以了,何必過分在神仙打架。 
// 你的評論其實挺好的。Sigh,只可惜因為IE,我好可憐啊~~~ 

JavaScript技術JS類定義原型方法的兩種實現的區別評論很多,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: yellow免费观看直播 | 国产精品亚洲欧美一区麻豆 | 岳打开双腿开始配合日韩视频 | 在线看片韩国免费人成视频 | 纯h超级大尺度小黄文 | 中国xxxxx69| 成人区在线观看免费视频 | 一攻多受h嗯啊巨肉bl巨污 | 玖玖热视频一区二区人妻 | 国产色婷亚洲99精品AV在线 | 色欲AV精品人妻一区二区麻豆 | 在野外被男人躁了一夜动图 | 伦理片秋霞免费影院 | 天天躁人人躁人人躁狂躁 | 琪琪午夜福利免费院 | 亚洲 天堂 国产在线播放 | 久久精品中文字幕有码日本 | 欧美香蕉大胸在线视频观看 | 第一次破女视频出血视频 | 国产99视频精品免费播放 | 高清视频在线观看SEYEYE | 花蝴蝶在线直播观看 | 国产在线观看99 | 精品国产午夜肉伦伦影院 | 第一次处破女高清电影 | 呜呜别塞了啊抽插 | 99久久精品互换人妻AV | 好大快用力深一点h视频 | 狠狠射首页 | 久久久亚洲国产精品主播 | 国色天香视频在线社区 | 国产又爽又黄又不遮挡视频 | 成人1000部免费观看视频 | 国产AV白丝爆浆在线播放 | 拔擦拔擦8X永久华人免费播放器 | 一道精品视频一区二区三区 | 国产亚洲日韩在线播放不卡 | 在线观看视频亚洲 | 日本熟妇乱妇熟色A片蜜桃亚洲 | 与嫂子同居的日子在线观看 | 久久婷婷五月综合色丁香 |