Мне показалось, что я понял объект прототипа javascript и как его использовать, но теперь я столкнулся с чем-то, что немного озадачило меня. При попытке запустить код ниже mpo.testFire()
пожаров без проблем, но я получаю ошибку Uncaught TypeError: Объект # не имеет метода «fireAlert» при попытке вызвать 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
};
}();
Я предполагаю, что есть проблема сферы, так как в первом примере, я возвращаю интерфейс от родительского объекта , Может ли кто-нибудь объяснить, почему первый пример не работает?
здесь есть несколько jquery, и вопрос должен быть помечен как таковой. – imulsion
@imulsion спасибо, я добавил тэг jquery. – Dropzilla
Вопрос в том, что касается ядра JavaScript, он не имеет никакого отношения к jQuery вообще – 0xor1