AngularJS获取工厂对象的实例

时间:2016-03-21 08:00:08

标签: 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代码隐藏了原型/构造函数属性。

Websearch非常痛苦,因为(大部分)所有结果都涉及服务和工厂之间的差异。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

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

如果你这样做,

[passWordTextField resignFirstResponder]; passWordTextField.secureTextEntry = !passWordTextField.secureTextEntry; [passWordTextField becomeFirstResponder]; 将正常工作,如下所示:

$.ajax({
        url:'http://www.yoursitelink.com/',
        type:'GET',
        success: function(data){
        var html = data;
        $("#img").attr('src');
      }
    });

答案 1 :(得分:0)

同意@ T.J 。或者,您也可以按照以下方式实施。

您可以阅读他们的documentation实际上Angular如何实例化命名提供程序。这是Angular社区自己定义的最佳实践。

Fiddle Link

<强>代码:

angular.module('so', []);
angular.module('so')
  .factory('UserFac', function UserFac() {
   return function (first, last) {
      this.name = first + ' ' + last
    }
  })
  .controller('UserCtrl', function(UserFac) {
    var user = new UserFac('John', 'Doe');
    console.log(user instanceof UserFac)
    console.log("Name:"+user.name);
  });