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

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914173
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 独山县| 福州市| 寻甸| 上思县| 尉氏县| 安图县| 社旗县| 农安县| 广元市| 鄂温| 漳平市| 广昌县| 商城县| 南靖县| 寻乌县| 大余县| 石首市| 平江县| 沈丘县| 广东省| 涟源市| 牙克石市| 乌拉特中旗| 仪征市| 临夏县| 江永县| 佳木斯市| 柏乡县| 雅江县| 左权县| 湄潭县| 昌黎县| 济南市| 道孚县| 河西区| 中阳县| 启东市| 乐清市| 桓台县| 龙海市| 海口市|