向Java中的javascript对象添加行为

向Java中的javascript对象添加行为,javascript,angularjs,Javascript,Angularjs,我对使用angular很陌生,对于在angular中向对象添加行为有一个疑问 我有一个例子,我得到了一个对象或对象数组,比如说person使用$http var person = { id : 123, firstname : "james", lastname : "bond", username : "james00", profileGuid : "DSKFSJKFBSFBJBSFKJBAKBDS", proj

我对使用angular很陌生,对于在angular中向对象添加行为有一个疑问

我有一个例子,我得到了一个对象或对象数组,比如说person使用
$http

var person =
    {
      id : 123,
      firstname : "james",
      lastname : "bond",
      username : "james00",
      profileGuid : "DSKFSJKFBSFBJBSFKJBAKBDS",
      projects : [
             {
                id : 1,
                name : "gold finger"
             }
       ] 
    }
我想添加像say这样的行为

 var spyBehavior = 
 {
    greet : function(){
        return this.lastname + " " + this.firstName + " " + this.lastName;
    },

    hasExperience : function(){
      this.projects && this.projects.length && this.projects.length > 0
    }
 }
目前,我使用
angular.extend(person,spyBehavior)

  • 使用此类
    spyBehavior
    对象添加行为的优缺点是什么
  • 是否应将其定义为角度服务?-在这种情况下,我将
    this
  • 这是否应该在angular world之外,作为一个简单的javascript对象存在,并围绕$http输出进行包装?我该怎么做

    • 我想你想要的是某种型号。我总是以工厂的方式定义我的模型,因为服务是单例的

      angular.module('myApp').factory('User', function() {
        var _greet = function() {
          console.log("hello");
        };
        var User = function(data) {
          angular.extend(this, {
            email: null,
            name: null
            greet: _greet
          }, data);
        };
        return User;
      });
      
      然后,您可以将您的用户“模型”注入到您想要的任何模块中。如果您想获得该模型的新实例,只需执行

      var user = new User(data);
      

      按照单一责任的方法,这个对象有点愚蠢。它只知道它自己的属性,如何处理它们等等。如果您想添加一些行为,如通过
      $http
      更新此对象,只需将
      $http
      服务注入到您的用户模型中,然后执行您想要的操作。请确保不要与其他模型产生不必要的依赖关系。

      我认为您需要的是某种模型。我总是以工厂的方式定义我的模型,因为服务是单例的

      angular.module('myApp').factory('User', function() {
        var _greet = function() {
          console.log("hello");
        };
        var User = function(data) {
          angular.extend(this, {
            email: null,
            name: null
            greet: _greet
          }, data);
        };
        return User;
      });
      
      然后,您可以将您的用户“模型”注入到您想要的任何模块中。如果您想获得该模型的新实例,只需执行

      var user = new User(data);
      

      按照单一责任的方法,这个对象有点愚蠢。它只知道它自己的属性,如何处理它们等等。如果您想添加一些行为,如通过
      $http
      更新此对象,只需将
      $http
      服务注入到您的用户模型中,然后执行您想要的操作。请确保不要与其他模型产生不必要的依赖关系。

      我认为您需要的是某种模型。我总是以工厂的方式定义我的模型,因为服务是单例的

      angular.module('myApp').factory('User', function() {
        var _greet = function() {
          console.log("hello");
        };
        var User = function(data) {
          angular.extend(this, {
            email: null,
            name: null
            greet: _greet
          }, data);
        };
        return User;
      });
      
      然后,您可以将您的用户“模型”注入到您想要的任何模块中。如果您想获得该模型的新实例,只需执行

      var user = new User(data);
      

      按照单一责任的方法,这个对象有点愚蠢。它只知道它自己的属性,如何处理它们等等。如果您想添加一些行为,如通过
      $http
      更新此对象,只需将
      $http
      服务注入到您的用户模型中,然后执行您想要的操作。请确保不要与其他模型产生不必要的依赖关系。

      我认为您需要的是某种模型。我总是以工厂的方式定义我的模型,因为服务是单例的

      angular.module('myApp').factory('User', function() {
        var _greet = function() {
          console.log("hello");
        };
        var User = function(data) {
          angular.extend(this, {
            email: null,
            name: null
            greet: _greet
          }, data);
        };
        return User;
      });
      
      然后,您可以将您的用户“模型”注入到您想要的任何模块中。如果您想获得该模型的新实例,只需执行

      var user = new User(data);
      

      按照单一责任的方法,这个对象有点愚蠢。它只知道它自己的属性,如何处理它们等等。如果您想添加一些行为,如通过
      $http
      更新此对象,只需将
      $http
      服务注入到您的用户模型中,然后执行您想要的操作。请确保不要与其他模型建立不必要的依赖关系。

      如果您是从HTTP后端检索模型,AngularJS有一个很酷的功能,名为
      transformResponse
      。您可以为特定的
      $http
      调用指定
      transformResponse
      函数。函数将接收http请求的响应作为参数,根据您的实现对其进行操作,然后返回它。当然,由于angular
      $resource
      是在
      $http
      之上构建的,因此您可以在这两种方式中使用
      transformResponse

      简言之,如果您希望接收一组人员并使用一些功能对其进行装饰,我会这样做:

      • 实现映射到API的
        人员
        $resource
      • 实现一个函数,在给定一组人员的情况下,添加所需的行为
      • 将上述函数指定为人力资源的
        transformResponse
        参数
      你就完了。在请求结束时,您将得到一组具有附加功能的人员。您可以对一个简单的
      $http
      请求执行完全相同的操作,
      transformResponse
      属性也可以以相同的方式指定


      另请参见。

      如果您从HTTP后端检索模型,AngularJS有一个很酷的功能,名为
      transformResponse
      。您可以为特定的
      $http
      调用指定
      transformResponse
      函数。函数将接收http请求的响应作为参数,根据您的实现对其进行操作,然后返回它。当然,由于angular
      $resource
      是在
      $http
      之上构建的,因此您可以在这两种方式中使用
      transformResponse

      简言之,如果您希望接收一组人员并使用一些功能对其进行装饰,我会这样做:

      • 实现映射到API的
        人员
        $resource
      • 实现一个函数,在给定一组人员的情况下,添加所需的行为
      • 将上述函数指定为人力资源的
        transformResponse
        参数
      你就完了。在请求结束时,您将得到一组具有附加功能的人员。您可以对一个简单的
      $http
      请求执行完全相同的操作,
      transformResponse
      属性也可以以相同的方式指定


      另请参见。

      如果您从HTTP后端检索模型,AngularJS有一个很酷的功能,名为
      transformRespo