我正在创建一个封装和可注入类型的角度工厂,可以像这样对它们进行新的创建:
(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
ed对象与另一个对象new
一起使用,因此其类型不再是PaymentStream
,生成的对象将成为“通用” 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);
}
此代码未经测试,请告诉我它是否有效:)
关于javascript - 在 Angular 工厂内设置* .prototype方法无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35216195/