Javascript 未从对象内调用函数
所以我试着学习这本叫做“头部优先:HTML5编程”的书,这意味着我在学习JavaScript 我非常习惯像Java和C这样的OOP语言,而JS对我来说是非常新的,因为整个原型方面。下面的代码有两个函数,当它们是全局函数时,它们通常可以工作。然而,在我将它们移动到对象创建代码中之后,它完全停止了工作 这可能是语法错误或逻辑错误。但我自己似乎无法指出任何地方,因为我还没有用JavaScript完成调试 非常感谢您的帮助Javascript 未从对象内调用函数,javascript,html,Javascript,Html,所以我试着学习这本叫做“头部优先:HTML5编程”的书,这意味着我在学习JavaScript 我非常习惯像Java和C这样的OOP语言,而JS对我来说是非常新的,因为整个原型方面。下面的代码有两个函数,当它们是全局函数时,它们通常可以工作。然而,在我将它们移动到对象创建代码中之后,它完全停止了工作 这可能是语法错误或逻辑错误。但我自己似乎无法指出任何地方,因为我还没有用JavaScript完成调试 非常感谢您的帮助 function makeMovie(title, genre, rating,
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”。每对夫妇的财产/价值都用逗号分隔。如果添加这些详细信息。。。对于答案,不是隐藏在评论中,我将改变我的投票。