Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 OOP,没有给我一个错误,但代码不工作_Javascript_Oop - Fatal编程技术网

Javascript OOP,没有给我一个错误,但代码不工作

Javascript OOP,没有给我一个错误,但代码不工作,javascript,oop,Javascript,Oop,为什么下面的代码没有提供错误?但它也不会在body标记中创建div。假设身体是空的。任何帮助都将不胜感激 谢谢 为什么下面的代码没有提供错误 三个可能的原因:代码没有运行,没有错误,或者您没有看到它。我猜是第二个 但它也不会在body标记中创建div 可能是因为在代码运行时没有与选择器匹配的元素$('body')可以是一个空集合,jQuery不会对此抱怨 了解确切原因和一些解决方案,其中最简单的方法是: 这取决于脚本代码在页面中的位置 如果它位于主体元素内,则文档已包含 一个body元素,$('

为什么下面的代码没有提供错误?但它也不会在body标记中创建div。假设身体是空的。任何帮助都将不胜感激

谢谢

为什么下面的代码没有提供错误

三个可能的原因:代码没有运行,没有错误,或者您没有看到它。我猜是第二个

但它也不会在body标记中创建div

可能是因为在代码运行时没有与选择器匹配的
元素<代码>$('body')可以是一个空集合,jQuery不会对此抱怨

了解确切原因和一些解决方案,其中最简单的方法是:


这取决于脚本代码在页面中的位置

如果它位于
主体
元素内,则文档已包含 一个body元素,
$('body')
返回它,一切正常

如果它位于
head
元素中,则在脚本运行时主体还不存在,
$('body')
返回一个空集合,并将div追加为空

在这种情况下,jquery不会抛出错误,因此不会出现错误

如果要在head元素中编写脚本,请将其包装在文档中。就绪调用:

$(function Engine() {
    …
    $('body').append(box1.element);
});

+函数引擎(){
$(文档).ready(函数(){
var createObject=函数(elemClass、高度、宽度){
this.element=document.createElement('div');
$(this.element).addClass(elemClass)
$(this.element).css('height',height);
$(this.element).css('width',width);
};
var box1=新的createObject('box',200400);
$('body').append(box1.element);
});
}();

它会起作用。

缺少错误消息并不能保证正确的行为。哦,所以他通过使发生的事情稍微不那么明显而节省了一个字节。我猜这是在添加div,但因为它没有内容,所以你看不到它。您的代码似乎适合我(我添加了一些CSS以使其具有ovbious):似乎添加了元素,但它是空的。您可能没有等到DOM准备好运行该代码。就这样。摆脱IIFE并将代码包装在
$(函数(){…})中这是我讨厌jQuery的原因之一。它提倡错误吞咽。@plalx:+1然而,在这样一个通用的
$
函数中,关于空集合的警告很难实现……当我只检查元素是否存在时,我不介意空集合,但我介意对它们调用某些操作。也许他们应该实现默认的
$
函数,在为空时抛出,并实现第二个
$。query
函数不…太棒了,也感谢您的解释!只是为了澄清我的代码在头部。@user3229616请注意,IIFE在这里是完全无用的。传递给
$(document.ready
的函数已生成新的作用域。另外,如果您关心保存字节,您可以直接将函数传递给
$()
,而不是调用
ready
@plalx great!我会考虑到这一点,谢谢你的注释。我同意,如果你把脚本放在body元素的末尾,那就更简洁了:你甚至可以跳过$(),因为body元素已经在DOM中了
$(function Engine() {
    …
    $('body').append(box1.element);
});
<script>
+ function Engine() {
      $(document).ready(function(){
        var createObject = function(elemClass, height, width){

            this.element = document.createElement('div');

            $(this.element).addClass(elemClass)
            $(this.element).css('height', height);
            $(this.element).css('width', width);

        };

        var box1 = new createObject('box', 200, 400);

        $('body').append(box1.element);

     });

}();
</script>