今天閑來無聊,回顧知識點,記憶告訴自己,prototype 是能動態給js的對象添加屬性和函數的。

          寫了一個小例子。居然沒調通。我老郁悶啦。

          eg:
          function MyObject(t)
                     {
                         
          this.name = t;
                     }
                     
                     MyObject.prototype.writeName 
          = function()
                     {
                          
          return this.name;
                     }
                     
                     
          var myobj1 = new MyObject("b");
                  
                     alert(myobj1.writeName());
                     
                     MyObject.prototype.name 
          = "c";
                     
                     alert(myobj1.writeName());

          心想應該分別輸出 “b” 和 “c”

          結果兩次輸出都是“b”。仔細看著這簡單的腳本似乎沒有任何錯誤,看久了我想起一句話,prototype 是動態追加。 于是我在想,動態追加,是否應該該成這樣呢。
          function MyObject(t)
                     {
                         
          this.size = t;
                     }
                     
                     MyObject.prototype.writeName 
          = function()
                     {
                          
          return this.name;
                     }
                  
                     MyObject.prototype.name 
          = "b";
                  
                     
          var myobj1 = new MyObject("b");
                  
                     alert(myobj1.writeName());
                     
                     MyObject.prototype.name 
          = "c";
                     
                     alert(myobj1.writeName());

           這次修改后,輸出的結果和自己想的是一致的,以至于不再否認人生了。。。(夸張了點

          總結如下。

          1.在類的基礎或者說原生已有的情況下,prototype是不能覆蓋的,他的功能是追加,擴展。(當然自然讓我們想到繼承,不錯,這個思路是對的。)

          2.如果同時動態增加的屬性或者方法,prototype是能覆蓋掉的。(我不能空口下結論,給個小腳本如下。)
          function MyObject(t)
                     {
                         
          this.size = t;
                     }
                     
                     MyObject.prototype.writeName 
          = function()
                     {
                          
          return this.name;
                     }
                  
                     MyObject.prototype.name 
          = "b";
                  
                     
          var myobj1 = new MyObject("b");
                  
                     alert(myobj1.writeName());
                     
                     MyObject.prototype.name 
          = "c";
                     
                     alert(myobj1.writeName());
                  
                      MyObject.prototype.name 
          = "d";
                  
                    alert(myobj1.writeName());






          posted on 2010-03-17 21:58 -274°C 閱讀(2936) 評論(0)  編輯  收藏 所屬分類: web前端

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 917238
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 南投市| 淳安县| 彭山县| 太原市| 乐安县| 平利县| 嘉定区| 沂南县| 澄城县| 永丰县| 嘉祥县| 思南县| 拜城县| 石屏县| 抚顺市| 黎城县| 文登市| 双辽市| 博客| 鄯善县| 永平县| 巫溪县| 上林县| 赤城县| 措美县| 启东市| 临夏县| 外汇| 金溪县| 嘉黎县| 绥滨县| 都江堰市| 大足县| 崇信县| 开原市| 浙江省| 西安市| 静乐县| 巴彦县| 富顺县| 大悟县|