我正在创建一个封装和可注射类型的角度工厂,可以这样修改:
(function() {
angular
.module('app')
.factory('PaymentStream', [
function() {
function PaymentStream(){
this._endingBalance = null;
}
PaymentStream.prototype.serialize = function() {
// method body here
};
return PaymentStream;
}]);
})();
当我通过new PaymentStream()
创建PaymentStream时,似乎只调用了构造函数。如果我不使用prototype
并且只是在构造函数中定义方法,那么它可以工作,但我会重新定义每个实例的函数。
知道为什么没有设置这些原型吗?
修改
以下是如何在外面使用它。
function addStreamFunctions(stream) {
angular.merge(stream, new PaymentStream());
}
答案 0 :(得分:1)
因此,基于您的编辑,工厂确实正常工作。问题在于你使用它的方式,angular.merge
new
ed对象与另一个对象,因此它的类型不再是PaymentStream
,结果对象变为&#39}。通用' object
如果流是普通对象,您可以做的是在stream
的构造函数中传递PaymentStream
变量,并在构造函数内手动合并。像
function PaymentStream(stream){
this._endingBalance = null;
var keys = Object.keys(stream); //get all properties from the stream
keys.forEach(function(key){
this[key] = stream[key]; //put each one in the instance of your object;
});
}
然后像
一样使用它function addStreamFunctions(stream) {
var stream = new PaymentStream(stream);
}
此代码未经测试,请告诉我它是否有效:)
答案 1 :(得分:0)
由于您正在使用factory
,因此您需要返回该对象的实例,在本例中为PaymentStream
的新实例
(function() {
angular.module('my-app').factory('PaymentStream', [function() {
function PaymentStream() {
this._endingBalance = null;
}
PaymentStream.prototype.serialize = function() {
// method body here
};
return new PaymentStream();
}]);
})();