Uncaught TypeErroe: Uncaught TypeError: Cannot call method 'push' of undefined 和 Uncaught TypeError: undefined is not a function


1.Uncaught TypeError: undefined is not a function

情景描述:

function test(){

this.num=1;

};

$(function(){

  var test=new test();    // 當這條語句執行時,一開始var test定義為undefined類型,當執行到new test()報錯檢查到test為一個function,語句報錯,此次變量不能使用和function test同名的test名變量,將變量改名為_test或其他

});

2.Uncaught TypeError: Cannot call method 'push' of undefined

情景描述:

test1.js(非實際腳本)

function item(ID,Name)

{

self=this;

self.ID=ID;

self.Name=Name;

}

function s1(){

self=this;

self.testarray1=ko.observableArray();

self.loadtestarray1=function(){

 

     $.getJSON("/api/Stylist", function (data) {
          $.each(data, function (index, item) {
                self.testarray1.push(new item(item.ID,item.Name);
           });
     });

  }

}

$(function(){

   var s1=new s1();

   s1.loadtestarray1();

});

 

test2.js 示例(非實際腳本)

function s2(){

self=this;

self.testarray2=ko.observableArray();

self.loadtestarray2=function(){

        $.getJSON("/api/Stylist", function (data) {
               $.each(data, function (index, item) {
                 self.testarray2.push({ ID:item.ID,Name:item.Name});
                });
         });

      }

}

$(function(){

   var s2=new s2();

   s2.loadtestarray2();

});

在一個頁面中同時飲用了test1.js和test2.js,運行后報錯Uncaught TypeError: Cannot call method 'push' of undefined。

原因分析:單步調試跟蹤self變量值的變化情況,首先s1()函數先運行self賦值給了一個包含testarray1數組的object, 然后s2()

函數運行self賦值給了testarray2數組的object,接着s1.loadtestarray1()函數先執行獲取一組數據,並跳入了Item函數,self此

時變成了Item對象,之后執行完后跳入執行s2.loadtestarray2()函數,此時發現self應該變成了Item對象。self.testarray2已是

undefined類型了,因為Item對象自然不包含testarray2數組,故此時調用self.testarray2.push方法,self.testarray這個undefined

類型為定義push方法,調試器報錯 Uncaught TypeError: Cannot call method 'push' of undefined。

當多個js中假若要以其他變量替換this,應該命名不一樣。,如self1,self2,當然要取個有意義的命名。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM