今天閑來無聊,回顧知識點,記憶告訴自己,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 閱讀(2935) 評論(0)  編輯  收藏 所屬分類: web前端

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 916110
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 柘城县| 中江县| 兴国县| 太湖县| 宝兴县| 海兴县| 雷山县| 建德市| 横山县| 万安县| 崇仁县| 确山县| 雷波县| 旺苍县| 金溪县| 双辽市| 方山县| 克什克腾旗| 大厂| 策勒县| 唐海县| 库尔勒市| 衡水市| 永胜县| 茌平县| 乌兰县| 聊城市| 山阴县| 株洲市| 民乐县| 逊克县| 当阳市| 龙胜| 额济纳旗| 诸城市| 云霄县| 东山县| 缙云县| 瑞昌市| 桦南县| 乌兰浩特市|