AngularJS 获取工厂对象的实例
AngularJS get instance of factory object
有没有办法检查 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
看起来 factories/services 的内部 AngularJS
代码隐藏了 prototype/constructor 属性。
网络搜索非常痛苦,因为(大部分)所有结果都涉及服务和工厂之间的区别。
感谢您的帮助!
一个问题是您的构造函数是匿名的,另一个问题是您返回的是对象文字(它不是构造函数的实例,而是对象构造函数的实例) 来自你的构造函数。
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)
});
同意@T.J。或者你也可以按下面的方式实现。
您可以阅读他们的 documentation 实际上 Angular 实例化命名提供程序的方式。这是 Angular 社区本身定义的最佳实践。
代码:
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);
});
有没有办法检查 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
看起来 factories/services 的内部 AngularJS
代码隐藏了 prototype/constructor 属性。
网络搜索非常痛苦,因为(大部分)所有结果都涉及服务和工厂之间的区别。
感谢您的帮助!
一个问题是您的构造函数是匿名的,另一个问题是您返回的是对象文字(它不是构造函数的实例,而是对象构造函数的实例) 来自你的构造函数。
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)
});
同意@T.J。或者你也可以按下面的方式实现。
您可以阅读他们的 documentation 实际上 Angular 实例化命名提供程序的方式。这是 Angular 社区本身定义的最佳实践。
代码:
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);
});