我正在创建一个封装和可注入类型的角度工厂,可以像这样对它们进行新的创建:

(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/

10-13 02:22