[英]javascript prototype how to create object
我目前正在使用javascript学习原型,我写了以下内容,当我使用它时似乎工作正常。 我的问题是,为什么我需要在原型声明的末尾加上(),否则如果我尝试创建该对象的实例,则会收到错误消息。
var MyTest = function (agencyId, dataId) {
this.agencyId= agencyId;
this.dataId= dataId;
};
MyTest.prototype = function () {
var setObservables = function () {
...
},
init = function (url) {
...
};
// public members
return {
init: init
};
}();
使用它,我称它为
var obj = new DetailsDivisionKO(1, 2);
obj.init(actionUrl);
这个工作正常,但我对}()感到困惑; 在公共成员部分的末尾,为什么需要这样做,而我却无法使用它,而仍然使用上面的代码来调用它? 否则,如果我尝试调用上述代码,则会收到错误消息:
Uncaught TypeError: Object [object Object] has no method 'init'
您拥有的是IIFE 。 它是一个被直接调用的函数。 您基本上是在创建一个闭包 。 您要在将初始函数公开的同时将真正的私有范围保留给setObservables函数。 因此,每次创建构造函数的新实例时,您的init函数将始终位于原型中。 但是setObservables不会。 在您的示例中,您只能在内部访问setObservables函数(因此为私有作用域)。 通常,如果只希望init函数调用您的私有函数(在您的情况下为setObservables),则可以这样做。 但是,如果这不是您想要的,则只需执行以下操作:
var MyTest = function (agencyId, dataId) {
this.agencyId= agencyId;
this.dataId= dataId;
};
MyTest.prototype = {
setObservables: function () {
...
},
init: function (url) {
...
}
}
现在,每次创建MyTest的新实例时,两个函数都将在其原型中。
var test = new MyTest(1, 2);
test.init();
test.setObservables();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.