有没有办法检查 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/