Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';是否将未定义的转换为对象?_Javascript_Jquery - Fatal编程技术网

Javascript Can';是否将未定义的转换为对象?

Javascript Can';是否将未定义的转换为对象?,javascript,jquery,Javascript,Jquery,错误:无法将未定义的转换为对象:this.page[1]=100。它已经定义好了,怎么了? 尝试使用thathelper变量传递上下文 var sheepclass ; (function($) { sheepclass = function(handler){ var $div = $('div'); var that = this; this.handler = $.extend({ 'sizes': 'thi

错误:无法将未定义的转换为对象:
this.page[1]=100。它已经定义好了,怎么了?


尝试使用
that
helper变量传递上下文

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();
})

尝试使用
that
helper变量传递上下文

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();
})

myconsole
内部,此
不等于您的对象,而是指
窗口
。因此,
此.page
未定义的
——索引到
页面
中的值没有任何区别

您必须将呼叫更改为:

myconsole.call(this);

myconsole
内部,此
不等于您的对象,而是指
窗口
。因此,
此.page
未定义的
——索引到
页面
中的值没有任何区别

您必须将呼叫更改为:

myconsole.call(this);
因为“this”指的是myconsole函数

试试这个:

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);
因为“this”指的是myconsole函数

试试这个:

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);

    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();
    })

    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();
    })

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

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();

还要注意的是,有一个只调用另一个方法的方法是不必要的。

这段代码中的很多似乎都是毫无意义的。
document.ready
处理程序是不必要的,因为与IIFE一样,没有DOM操作。您的代码可以缩减为:

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();


还请注意,没有必要使用只调用另一个方法的方法。

为什么需要将其包装到文档就绪处理程序中?您的代码涉及零DOM操作。这里有这么多代码。理解
this
myalert
部分的范围这一经典问题看起来很棘手。为什么要在那里添加一个函数来执行一个函数,然后初始化该函数?我正在制作一个jquery插件,它允许人们在外部新建一个对象,有什么问题吗?为什么需要将它包装在一个文档就绪的处理程序中?您的代码涉及零DOM操作。这里有这么多代码。理解
this
myalert
部分的范围这一经典问题看起来很棘手。为什么你要在那里添加一个函数来执行一个函数,然后初始化该函数?我正在制作一个jquery插件,它允许人们在外部新建一个对象,有什么问题吗?是的,它可以工作,但很奇怪,然后我把我所有的函数都改成了*。调用(这个)。。。我有很多功能。。为什么要用这些奇怪的方法。越来越strange@FatDogMark:不清楚为什么有许多嵌套函数。当然,您可以将
this
捕获到另一个变量(例如
that
)中,并将
that.page
而不是
this.page
,但这仍然意味着您必须找到对
this
的所有引用,并将它们更改为
that
。没有更简单的方法来做你正在做的事情,这意味着你正在做的不是一个好主意。是的,它可以工作,但很奇怪,然后我把我所有的函数都改成了*.call(this)。。。我有很多功能。。为什么要用这些奇怪的方法。越来越strange@FatDogMark:不清楚为什么有许多嵌套函数。当然,您可以将
this
捕获到另一个变量(例如
that
)中,并将
that.page
而不是
this.page
,但这仍然意味着您必须找到对
this
的所有引用,并将它们更改为
that
。没有更简单的方法来做你正在做的事情,这意味着你正在做的不是一个好主意。星号是怎么回事?星号是粗体的,对不起。星号是怎么回事?星号是粗体的,对不起。你不需要一直都有闭包变量。您可以从
myalert
内部使用
this
。您不需要一直使用闭包变量。您可以从
myalert
内部使用
this