[英]Setting *.prototype methods inside angular factory not working
我正在创建一个封装和可注入类型的角度工厂,可以像这样对它们进行更新:
(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());
}
因此,根据您的编辑,工厂确实可以正常工作。 是你用它的方式,你的问题angular.merge
d为new
编辑对象与另一个对象,所以它的类型不是PaymentStream
了,得到的对象变成了“通用” object
如果流是普通对象,您可以做的是在PaymentStream
的构造函数中传递stream
变量,然后在构造函数中手动进行合并。 就像是
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);
}
此代码未经测试,请告诉我它是否有效:)
由于您正在使用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();
}]);
})();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.