2

からプロトタイプを削除し、私が今持っているコードです:

// Factory 
angular.factory('Student', function() { 
    var defaults = { 
     StudentId: null 
    }; 

    var Student = function(params) { 
     angular.extend(this, angular.copy(defaults), params); 
    }; 

    // Prototype function for Student 
    Student.prototype.hasStudentId = function() { 
     return this.StudentId != null; 
    }; 
}); 

// Service 
angular.service('StudentService', ['Student', '$resource', function(Student, $resource) { 
    var service = {}; 

    service.student = $resource('student/:studentId'. {} { load: {method: 'GET'} }); 

    service.loadStudent = function(studentId) { 
     var currentStudent = service.student.load(studentId); // HTTP call 

     currentStudent.$promise.then(function() { 
      // I expect the object currentStudent would have hasStudentId() prototype function, but it's not 
      angular.extend(currentStudent, new Student(currentStudent)); 

      // However, if I use 'new' keyword, studentObj has prototype hasStudentId() function 
      var studentObj = new Student(currentStudent); 
     }); 
    }; 

    return service; 
}]); 

見ての通り、私はcurrentStudentオブジェクトを拡張した後、currentStudentはプロトタイプ機能hasStudentId()を持っていません。ただし、new Student(currentStudent)を使用すると、プロトタイプ関数が正しく機能します。

Angular.extendは、prototypeの機能を無視しますか?

現在、currentStudentオブジェクトには$resourceのプロトタイプ関数しかありません。

答えて

1

documentationangular.extendコピーのみ列挙可能なプロパティ。プロトタイププロパティは列挙可能ですが、オブジェクト自体に属していないため、自身のという名前にはなりません。 MDNにはこの記事に関する記事があります。here

+0

angular.extendの代わりに何を使用しますか? – KimchiMan

+1

$リソースを必要な機能で充実させてみませんか? – PerfectPixel

+0

$リソースを充実させるにはどうすればよいですか?私に少しのサンプルコードをお願いしますか? – KimchiMan

関連する問題