我试图在JavaScript文件中使用Revealing Prototype Pattern来封装两个相关函数集合。但是当页面加载时,它会在调用.init函数时返回以下错误:
"未捕获的TypeError:未定义不是函数。"
这是我的标记模式。
<script>
$(function () {
testProto1.init();
testProto2.init();
});
</script>
这是我的JavaScript文件中的模式。
var testProto1 = function () {
};
testProto1.prototype = function () {
var init = function () {
alert("init 1");
};
return {
init: init
}
}();
var testProto2 = function () {
};
testProto2.prototype = function () {
var init = function () {
alert("init 2");
};
return {
init: init
}
}();
这可能是我的一些基本语法错误,如果它是重复的,我会道歉。为什么我会看到此错误,如何解决?感谢。
答案 0 :(得分:3)
看起来你正在使用原型和放大器的概念。函数实例在很多方面都不正确。
如果您希望能够访问原型,则需要使用instantiate
运算符new
函数。
看起来你正试图实现这个目标:
var testProto1 = function () { };
// Create your methods in object notation within your prototype
testProto1.prototype.init = function () {
alert('init called');
};
现在,如果你想打电话给它,你必须instantiate
它!
var proto1 = new testProto1();
// NOW you can call .init! Because the prototype was actually created
proto1.init(); // alerts 'init called!'
答案 1 :(得分:1)
您可以从此Object的实例访问原型属性,因此这将起作用:
var a=new testProto1();
a.init();
如果你想从testProto1访问init函数,你必须写:
testProto1.prototype.init();
所以你的代码看起来像是:
$(function () {
testProto1.prototype.init();
testProto2.prototype.init();
});