无法将undefined转换为对象?

时间:2012-12-04 10:05:41

标签: javascript jquery

错误:无法将undefined转换为object:this.page[1]=100;。它已经定义,什么是错的? enter image description here

var sheepclass ;
(function($) {
    sheepclass = function(handler){
        var $div = $('div');            
        this.handler = $.extend({
            'sizes': 'thin', 
            'eat': 'grass',
            'color': 'white',
            'page':[],
            myalert: function() {
                myconsole();
                function myconsole() {
                    this.page[0] = 100; 
                    console.log(this.page[0]);
                }
            },
            myalert2: function() {
                this.myalert();
            }
        },handler);
    }
})(jQuery);

$(document).ready(function(){
    var blacksheep = new sheepclass({'color':'black'});
    blacksheep.handler.myalert2();
})

5 个答案:

答案 0 :(得分:1)

尝试此操作,使用that辅助变量

传递上下文
var sheepclass ;
(function($) {
    sheepclass = function(handler){
        var $div = $('div');
        var that = this;
        this.handler = $.extend({
            'sizes': 'thin', 
            'eat': 'grass',
            'color': 'white',
            'page':[],
            myalert: function() {
                myconsole();
                function myconsole() {
                    that.handler.page[0] = 100; 
                    console.log(that.handler.page[0]);
                }
            },
            myalert2: function() {
                this.myalert();
            }
        },handler);
    }
})(jQuery);

$(document).ready(function(){
    var blacksheep = new sheepclass({'color':'black'});
    blacksheep.handler.myalert2();
})

答案 1 :(得分:1)

内部myconsole this不等于您的对象,而是引用Window。因此this.pageundefined - 您将page索引的值与之无关。

您必须将通话更改为:

myconsole.call(this);

答案 2 :(得分:1)

很多这些代码似乎毫无意义。 document.ready处理程序是不必要的,因为没有DOM操作,就像IIFE一样。您的代码可以简化为:

var sheepclass = function(handler){
    this.handler = $.extend({
        'sizes': 'thin', 
        'eat': 'grass',
        'color': 'white',
        'page':[],
        myalert: function() {
            var context = this;
            function myconsole() {
                context.page[0] = 100; 
                console.log(context.page[0]);
            }
            myconsole();
        }
    },handler);
}

var blacksheep = new sheepclass({'color':'black'});
blacksheep.handler.myalert();

另请注意,不需要使用只调用其他方法的方法。

答案 3 :(得分:0)

因为“this”是指控制台功能。

试试这个:

var sheepclass ;
(function($) {
    sheepclass = function(handler){
        var $div = $('div');    
        **var page = this.page;**
        this.handler = $.extend({
            'sizes': 'thin', 
            'eat': 'grass',
            'color': 'white',
            'page':[],
            myalert: function() {
                myconsole();
                function myconsole() {
                    **page**[0] = 100; 
                    console.log(**page**[0]);
                }
            },
            myalert2: function() {
                this.myalert();
            }
        },handler);
    }
})(jQuery);

答案 4 :(得分:0)

that

制作this变量
    var sheepclass ;
    (function($) {
        sheepclass = function(handler){
            var $div = $('div');            
            this.handler = $.extend({
                'sizes': 'thin', 
                'eat': 'grass',
                'color': 'white',
                'page':[200,300],
                myalert: function() {
                    var that = this;
                    myconsole();
                    function myconsole() {
                        that.page = that.page || []
                        that.page[0] = 100; 
                        console.log(that.page[0]);
                    }
                },
                myalert2: function() {
                    this.myalert();
                }
            },handler);
        }
    })(jQuery);

    $(document).ready(function(){
        var blacksheep = new sheepclass({'color':'black'});
        blacksheep.handler.myalert2();
    })