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
。