我是棱角分明的新人,现在我正在学习" $资源"。但问题与" $ resource"并没有直接关系,而是我试图弄清楚如何在Angular工厂做一些类似于"的概念。 class object"和"实例对象"与" $ resource"。
我的意思是,如果我宣布一个像:
这样的工厂怎么可能呢?angular.module('myApp.services').factory('Entry', function($resource) {
return $resource('/api/entries/');
});
如果我使用工厂返回的对象,我会得到一个"类对象"我可以执行像
这样的方法angular.module('myApp.controllers').controller('ResourceController',function(Entry) {
var entries = Entry.query(function() {
console.log(entries);
});
});
但是(这是我无法理解的),如果我使用" new",我得到一个"实例对象",然后我可以使用像" $ save(),$ delete()或$ remove()"。
怎么可能?功能" $资源(' / api / entries /');"返回所以可以将它用作对象和构造函数(使用" new")来获取实例?
谢谢!
答案 0 :(得分:1)
在Javacript中,函数可以充当对象构造函数(没有“class”关键字“)。
$ ressource(“whatever”)类的行为不像对象:“query”方法是一个类方法,$ save是一个实例方法。
////////////////
// Example "class" definition
////////////////
// Define constructor
var Logger = function(prefix) {
this.prefix = prefix;
};
// Define instance method
Logger.prototype.log = function(text) {
console.log(this.prefix, text);
};
// Define class method ("static" method)
Logger.log = function(prefix, log) {
console.log(prefix, log);
}
////////////////
// Example usage
////////////////
var myInstance = new Logger("Hello"); // create instance
myInstance.log('World'); // call instance method
=> Hello World
Logger.log("Hello", "World"); // call class method
=> Hello World
但是一旦定义了一个类,就可以定义一个定义类的函数。
$ ressource函数,只是一个返回构造函数的函数。
var LoggerMeta = function(prefix1) {
var Logger = function(prefix2) {
this.prefix = prefix1 + prefix2;
};
Logger.prototype.log = ...; // same a before
Logger.log = ...; // same as before
return Logger;
};
// call function that returns a constructor function
var Logger = LoggerMeta("Hello");
// create instance
var myLogger = new Logger(" World");
// call instance method
myLogger.log("again")
=> Hello World again