jsFiddle无法识别课程?

时间:2015-02-13 20:40:12

标签: javascript

此处最初报道: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不是函数。”

2 个答案:

答案 0 :(得分:1)

这是因为bar.prototype的位置。特别是因为它是在创建实例和调用之后,因此还没有定义:

baz = new bar();
baz.getMessage();
... 
bar.prototype = { ... }

意味着getMessage()尚未定义,请注意您正在使用作业=,这意味着在代码中到达该行之前不会定义getMessage()。解决方案是首先定义bar.prototype

bar.prototype = { ... }
...
baz = new bar();
baz.getMessage();

Fiddle Example

答案 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/

相关问题