理解AngularJS $resource()返回什么(类或实例对象)

understanding what does AngularJS $resource() returns (class or instance object)

本文关键字:实例 对象 什么 返回 resource AngularJS 理解      更新时间:2023-09-26

我是angular的新手,现在我正在研究"$resource"。但是这个问题与"$resource"没有直接关系,而是我想弄清楚如何在Angular中制造一个工厂来做一些类似于"类对象"answers"实例对象"的概念。

我的意思是,如果我像这样声明一个工厂,怎么可能呢?

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()"。

这怎么可能?函数"$resource('/api/entries/');"返回,因此可以将其用作对象和构造函数(带有"new")来获取实例?

谢谢!

在javascript中函数可以作为对象构造函数(没有"class"关键字")。

$ resource ("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

但是一旦你定义了一个类,你就可以定义一个函数来定义类。

$ resource函数,只是一个返回构造函数的函数。

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