javascript - AngularJS 获取工厂对象的实例

标签 javascript angularjs prototype instanceof typeof

有没有办法检查 AngularJS 工厂创建的对象的实例?

angular.module('so')
    .factory('UserFac', function () {
        return function (first, last) {
             return {
                 name : first + ' ' + last
             };
        }
    })
    .controller('UserCtrl', function (User) {
        var user = new UserFac('John', 'Doe');

        function isUser(userObj) {
            // your answer here...
        }

        if (isUser(user)) {
            // does not matter
        }
    });

不幸的是,我发现无法通过常用的 JavaScript 方式检查工厂对象的实例,例如:

user instanceof UserFac

typeof user === 'UserFac'

user.constructor === UserFac

user.prototype === UserFac

看起来工厂/服务的内部 AngularJS 代码隐藏了原型(prototype)/构造函数属性。

网络搜索非常痛苦,因为(大多数)所有结果都涉及服务和工厂之间的差异。

感谢您的帮助!

最佳答案

一个问题是您的构造函数是匿名的,另一个问题是您返回一个对象文字(它不是构造函数的实例,而是 Object 构造函数的实例)你的构造函数。

如果您按如下所示操作,

instanceof 将正常工作:

angular.module('so', []);
angular.module('so')
  .factory('UserFac', function() {
    function UserFac(first, last) {
     //--------^-- give it the factory name
      this.name = first + ' ' + last
     //-^-- use the object created internally using this keyword
    }
    return UserFac;
  })
  .controller('UserCtrl', function(UserFac) {
    var user = new UserFac('John', 'Doe');
    console.log(user instanceof UserFac)
  });

关于javascript - AngularJS 获取工厂对象的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36125718/

相关文章:

php - CakePHP View 中的 Javascript 导致 Controller 操作被调用两次

javascript - Chrome 中的全尺寸子窗口

javascript - 使用 JQuery 从列表中删除除前 N 个元素之外的所有元素

javascript - Angularjs 1.2.x 注入(inject)器 :modulerrr error even a after adding ngRoute

Javascript 原型(prototype)方法与内部方法

javascript - 如何使用 jQuery/Ajax 更改基于变量的成功函数的输出?

javascript - Angular JS - 显示 1 div 并隐藏所有其他 div

angularjs - 模板中带有 ng-repeat 的 Angular 指令

javascript - 如何为 setAttribute 添加回调?

javascript - 从 Object.create 获取键