Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 未捕获类型错误:无法读取属性';默认视图';没有定义的生命_Javascript_Jquery - Fatal编程技术网

Javascript 未捕获类型错误:无法读取属性';默认视图';没有定义的生命

Javascript 未捕获类型错误:无法读取属性';默认视图';没有定义的生命,javascript,jquery,Javascript,Jquery,我正在学习jQuery第四版(PacktPub publishing),尝试其中一个练习,其中我必须创建名为.slideFadeIn()和.slideFadeOut()的新插件方法,将.fadeIn()和.fadeOut()的不透明动画与 .slideDown()和.slideUp()的高度动画 这是我当前的代码 (function($) { $.fn.slides={ slideIn:function(){ $(this).fadeIn().slideDown();

我正在学习jQuery第四版(PacktPub publishing),尝试其中一个练习,其中我必须创建名为.slideFadeIn()和.slideFadeOut()的新插件方法,将.fadeIn()和.fadeOut()的不透明动画与 .slideDown()和.slideUp()的高度动画

这是我当前的代码

(function($) {
  $.fn.slides={
    slideIn:function(){
      $(this).fadeIn().slideDown();
    },
    slideOut:function(){
      $(this).fadeOut().slideUp();
    }
  }
})(jQuery);

$('h1').click(function(){
  $(this).slides.slideOut();
});
但是当我点击
时,我得到了错误信息

Uncaught TypeError: Cannot read property 'defaultView' of undefined
我也试过了

(function($) {
  var elem=$(this);
  $.fn.slides={
    slideIn:function(){
      elem.fadeIn().slideDown();
    },
    slideOut:function(){
      elem.fadeOut().slideUp();
    }
  }
})(jQuery);
查看错误是否是因为
$(this)
引用了不同的上下文,但我仍然收到相同的错误

Uncaught TypeError: Cannot read property 'defaultView' of undefined 
编辑:我已尝试编辑代码以

$('h1').fadeOut().slideUp();
它是有效的,所以问题在于
$(这个)
,我只是不知道
$(这个)

有人能指出我的错误吗


谢谢

您创建插件的方式与我的略有不同,因为“this”是“fn.slides”的作用域“this”-因此,它会出错。我可以通过传递您想要的“this”的上下文来解决您的问题,即通过使用“call”来传递“h1”。使用“call”(和“apply”),我可以调用函数并在我想要的“this”上下文中传递

(function($) {
  $.fn.slides={
    slideIn:function(){
      $(this).fadeIn().slideDown();
    },
    slideOut:function(){
      $(this).fadeOut().slideUp();
    }
  }
})(jQuery);

$('h1').click(function(){
  $(this).slides.slideOut.call(this);
});

在函数
slideIn
slideOut
中,它看起来确实像
this====$.fn.slides
,尝试使用console.log(this),看看它告诉了你什么。推理:当作为
foo.bar(
foo.bar
调用时,
this===foo
Hi Paul,感谢您的回复,我尝试了console.log(this),它登录到console,h1元素。也就是Title,当我将console.log(this)放在函数中而不是单击处理程序中时,它返回对象{slideIn:function,slideOut:function};$(document.body).foo.bar();//对象{bar:function}你所说的**“this”是指“fn.slides”的作用域“this”**?我正在按照书中给出的示例创建插件,“如何创建插件?”我为不够简洁而道歉。当你调用slideOut(使用当前代码)时,slides的作用是$this-元素,但在方法“slideOut”中,$this指的是对象$.fn.slides.Console在该方法中的作用域。您将看到它转储了实际的slides对象。