受到角度服务方法声明的启发,我使用普通的javascript文件并以下面的方式编写函数(我不知道这种方法是什么)
gen_server
现在在HTML中,我想将其称为init
var MyService = function() {
var base;
var service = {
init: function (formdata) {
base.name = formdata.name;
console.log('calling init');
},
other: function () {
console.log('caling other');
}
}
return service;
}
但会产生以下错误
未捕获ReferenceError:未定义MyService
我们不能用普通的javascript实现这种方式吗?
答案 0 :(得分:4)
MyService
是一个函数而不是具有属性的对象,您需要调用
MyService().init(formdata);
base也是未定义的,因此必须初始化为
var base = {};
完整示例
var MyService = function() {
var base = {};
var service = {
init: function (formdata) {
base.name = formdata.name;
console.log('calling init');
},
other: function () {
console.log('caling other');
}
}
return service;
}
MyService().init({name:"2"}) ; //outputs 'calling init'
答案 1 :(得分:1)
试试这个
function MyService() {
this.base = "some thing";
}
MyService.prototype.init = function(formdata) {
console.log('calling init =>'+this.base);
}
MyService.prototype.other = function(formdata) {
console.log('caling other');
}
var myser = new MyService();
myser.init(1);
myser.other();
答案 2 :(得分:1)
正确的方法是使用原型。这用于创建SDK设计。如果您遇到任何JavaScript SDK,您将看到类似的模式。但这并不意味着你不能使用,我个人在我的所有项目中都使用它。
您应将MyService
括在私有作用域中,以避免与其他名称空间冲突,并仅返回MyService
。
(function(){
// move all variables to here
var base;
var _service = function(){
// this is the constructor function, the initial functions can be run from here
}
_service.prototype = {
init: function (formdata) {
base.name = formdata.name;
console.log('calling init');
},
other: function () {
console.log('caling other');
}
}
// invoke _service as myService in global scope
window.MyService = new _service();
})();
现在您可以使用
访问MyService的所有功能MyService.init({name:'James'}); // calling init
MyService.other(); // caling other
答案 3 :(得分:0)
试试这个。
function generateVPC() {
var form = document.getElementById('Myform');
formdata.name = 'Alpha';
console.log(formdata);
var myservice = new MyService();
myservice.init(formdata);
}
并且base也会给出错误,因此将base定义为
var base = {};