Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/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 未从对象内调用函数_Javascript_Html - Fatal编程技术网

Javascript 未从对象内调用函数

Javascript 未从对象内调用函数,javascript,html,Javascript,Html,所以我试着学习这本叫做“头部优先:HTML5编程”的书,这意味着我在学习JavaScript 我非常习惯像Java和C这样的OOP语言,而JS对我来说是非常新的,因为整个原型方面。下面的代码有两个函数,当它们是全局函数时,它们通常可以工作。然而,在我将它们移动到对象创建代码中之后,它完全停止了工作 这可能是语法错误或逻辑错误。但我自己似乎无法指出任何地方,因为我还没有用JavaScript完成调试 非常感谢您的帮助 function makeMovie(title, genre, rating,

所以我试着学习这本叫做“头部优先:HTML5编程”的书,这意味着我在学习JavaScript

我非常习惯像Java和C这样的OOP语言,而JS对我来说是非常新的,因为整个原型方面。下面的代码有两个函数,当它们是全局函数时,它们通常可以工作。然而,在我将它们移动到对象创建代码中之后,它完全停止了工作

这可能是语法错误或逻辑错误。但我自己似乎无法指出任何地方,因为我还没有用JavaScript完成调试

非常感谢您的帮助

function makeMovie(title, genre, rating, showtimes) {
    var movie = {
        this.title: title,
        this.genre: genre,
        this.rating: rating,
        this.showtimes: showtimes

        getNextShowing: function() {
            var now = new Date().getTime();

            for (var i = 0; i < this.showtimes.length; i++) {
                var showtime = this.getTimeFromString(this.showtimes[i]);
                if ((showtime - now) > 0) {
                    return "Next showing of " + this.title + " is " + this.showtimes[i];
                }
            }
            return null;
        }

        getTimeFromString: function(timeString) {
            var theTime = new Date();
            var time = timeString.match(/(\d+)(?::(\d\d))?\s*(p?)/);
            theTime.setHours( parseInt(time[1]) + (time[3] ? 12 : 0) );
            theTime.setMinutes( parseInt(time[2]) || 0 );
            return theTime.getTime();
        }
    }
    return movie;
}

var movie1array = ["3:00pm", "7:00pm", "11:00pm"];
var movie2array = ["5:00pm", "9:00pm"];

var movie1 = makeMovie("Plan 9 from Outer Space", "cult classic", 2, movie1array);
var movie2 = makeMovie("Forbidden Planet", "classic sci-fi", 5, movie2array);
函数makeMovie(标题、流派、评级、放映时间){
var电影={
标题:标题,
类型:类型,
这个。评级:评级,
这个。showtimes:showtimes
getNextShowing:函数(){
var now=new Date().getTime();
对于(var i=0;i0){
return“下次显示”+this.title+“是”+this.showtimes[i];
}
}
返回null;
}
getTimeFromString:函数(时间字符串){
var theTime=新日期();
var time=timeString.match(/(\d+)(:(\d\d))?\s*(p?/);
time.setHours(parseInt(time[1])+(time[3]?12:0));
time.setMinutes(parseInt(time[2])| | 0);
返回time.getTime();
}
}
回归电影;
}
var Movie1阵列=[“下午3:00”、“下午7:00”、“晚上11:00”];
var movie2array=[“5:00pm”,“9:00pm”];
var movie1=制作电影(“来自外层空间的计划9”,“邪教经典”,2,电影阵列);
var movie2=制作电影(“禁地星球”,“经典科幻”,5,电影2阵列);
这是我尝试调用JavaScript的HTML页面:

<!doctype html>
<html>
    <head>
        <title>The Webville Theater</title>
        <script src="Movie.js"></script>
        <meta charset="utf-8">
    </head>
    <body>
        <script>
            var nextShowing = movie1.getNextShowing();
            document.innerHTML = nextShowing;
            nextShowing = movie2.getNextShowing();
            document.body.innerHTML = nextShowing;
        </script>
    </body>
</html>

韦伯维尔剧院
var nextShowing=movie1.getNextShowing();
document.innerHTML=nextShowing;
nextShowing=movie2.getNextShowing();
document.body.innerHTML=nextShowing;

在对象中,属性前面不应加“this”。 “this”用于函数声明中。 每个属性/值对用逗号分隔

简单的例子:

var myObj = {
    foo: 'bar',
    test: 'foobar',
    logFoo: function(){
        console.log( this.foo)
    }
}

myObj.logFoo(); // log : 'bar'
您的代码:

function makeMovie(title, genre, rating, showtimes) {
    var movie = {
        title: title,
        genre: genre,
        rating: rating,
        showtimes: showtimes,

        getNextShowing: function() {
            var now = new Date().getTime();

            for (var i = 0; i < this.showtimes.length; i++) {
                var showtime = this.getTimeFromString(this.showtimes[i]);
                if ((showtime - now) > 0) {
                    return "Next showing of " + this.title + " is " + this.showtimes[i];
                }
            }
            return null;
        },

        getTimeFromString: function(timeString) {
            var theTime = new Date();
            var time = timeString.match(/(\d+)(?::(\d\d))?\s*(p?)/);
            theTime.setHours( parseInt(time[1]) + (time[3] ? 12 : 0) );
            theTime.setMinutes( parseInt(time[2]) || 0 );
            return theTime.getTime();
        }
    }
    return movie;
}

var movie1array = ["3:00pm", "7:00pm", "11:00pm"];
var movie2array = ["5:00pm", "9:00pm"];

var movie1 = makeMovie("Plan 9 from Outer Space", "cult classic", 2, movie1array);
var movie2 = makeMovie("Forbidden Planet", "classic sci-fi", 5, movie2array);
函数makeMovie(标题、流派、评级、放映时间){
var电影={
标题:标题,,
类型:类型,
评级:评级,
展示时间:展示时间,
getNextShowing:函数(){
var now=new Date().getTime();
对于(var i=0;i0){
return“下次显示”+this.title+“是”+this.showtimes[i];
}
}
返回null;
},
getTimeFromString:函数(时间字符串){
var theTime=新日期();
var time=timeString.match(/(\d+)(:(\d\d))?\s*(p?/);
time.setHours(parseInt(time[1])+(time[3]?12:0));
time.setMinutes(parseInt(time[2])| | 0);
返回time.getTime();
}
}
回归电影;
}
var Movie1阵列=[“下午3:00”、“下午7:00”、“晚上11:00”];
var movie2array=[“5:00pm”,“9:00pm”];
var movie1=制作电影(“来自外层空间的计划9”,“邪教经典”,2,电影阵列);
var movie2=制作电影(“禁地星球”,“经典科幻”,5,电影2阵列);

您需要创建对象的新实例;你忘记了“new”关键字。另外,假设电影是一个对象。。你还忘了几个逗号。我在w3c上读到使用“new”被认为是不好的。使用手动创建的对象,或者使用预定义的对象?似乎是使用预定义的。你在w3c上读到哪里使用new是不好的?我认识的唯一一个一直声称这一点的人是Douglass Crockford,他用错误的代码来支持这一点,但随后继续指责JavaScript而不是错误的代码。这里解释了构造函数、原型及其用法:它帮助新用户解释答案;仅仅转储代码并不总是足够的。最重要的是,你的编辑使这个答案的语法不正确。你能解释一下你做了什么吗?:)一切都很好@Daedalus。Vipar在对象中,属性前面不应加“this”函数声明中使用“this”。每对夫妇的财产/价值都用逗号分隔。如果添加这些详细信息。。。对于答案,不是隐藏在评论中,我将改变我的投票。