此处最初报道:Why is my jsfiddle Javascript class not defined?
然而,在我实施后,我看到了类似的行为,但似乎没有一个答案适用。
foo();
baz = new bar();
baz.getMessage();
function foo() {
$('#foo').html("I am foo.");
}
function bar() {
this.message = "I am bar.";
}
bar.prototype = {
getMessage: function() {
$('#bar').html(this.message);
}
};
小提琴位于:http://jsfiddle.net/eggmatters/qeufnpoj/2/
Firebug报告:“TypeError:baz.getMessage不是函数。”
答案 0 :(得分:1)
这是因为bar.prototype
的位置。特别是因为它是在创建实例和调用之后,因此还没有定义:
baz = new bar();
baz.getMessage();
...
bar.prototype = { ... }
意味着getMessage()
尚未定义,请注意您正在使用作业=
,这意味着在代码中到达该行之前不会定义getMessage()
。解决方案是首先定义bar.prototype
:
bar.prototype = { ... }
...
baz = new bar();
baz.getMessage();
答案 1 :(得分:1)
首先,你的JS没有执行。如果您从“No wrap-in< head>”更改JS负载“onLoad”,它会运行。
或者,您可以将JS包装在onload函数中:
$(function() {
...
}
或
window.onload = function() {
...
}
其次,您需要在尝试执行之前声明原型:
foo();
bar.prototype = {
getMessage: function() {
$('#bar').html(this.message);
}
};
baz = new bar();
baz.getMessage();
function foo() {
$('#foo').html("I am foo.");
}
function bar() {
this.message = "I am bar.";
}
JSFiddle:http://jsfiddle.net/5drcuwx5/