我以为我了解了 javascript 原型对象以及如何使用它,但现在我遇到了一些让我有点难过的事情。当尝试运行下面的代码mpo.testFire()
时,没有任何问题,但我收到错误 Uncaught TypeError: Object # has no method 'fireAlert' when trying to invoke mpo.fireAlert()
,我认为这是原型的一部分:
<body>
<a href="#" id="testBtn">Click Me</a>
</body>
// Click handler, create new object
// call parent method and prototype method
$("#testBtn").click(function(e) {
e.preventDefault();
var mpo = new Myobject();
mpo.testFire();
mpo.fireAlert();
});
Myobject = function () {
var testFire = function () {
alert('testFire');
};
return {
testFire:testFire
};
};
Myobject.prototype = function() {
var fireAlert = function() {
alert('made it to fireAlert');
};
return {
fireAlert:fireAlert
};
}();
如果我更改代码并将所有内容移动到对象的原型中,就像下面的代码一样,一切都会按预期工作:
$("#testBtn").click(function(e) {
e.preventDefault();
var mpo = new Myobject();
mpo.testFire();
mpo.fireAlert();
});
Myobject = function () {
// constructor logic here maybe?
};
Myobject.prototype = function() {
var fireAlert = function() {
alert('made it to fireAlert');
};
var testFire = function () {
alert('testFire');
};
return {
fireAlert:fireAlert,
testFire:testFire
};
}();
我猜测存在范围问题,因为在第一个示例中,我从父对象返回了一个接口。谁能解释为什么第一个例子不起作用?