Uncaught TypeErroe: Uncaught TypeError: Cannot call method 'push' of undefined 和 Uncaught TypeError:...

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,当然要取个有意义的命名。

 

转载于:https://www.cnblogs.com/lushuicongsheng/archive/2012/08/19/2646906.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值