0

アプリに次のコードがあります。

app.factory('User', ['railsResourceFactory', '$http', function (railsResourceFactory, $http) {
    var res = railsResourceFactory({url: '/users', name: 'user'});

    res.prototype.hello = function () {
        return "hello";

    };

    debugger;

    return res;
}]);

angularjs-rails-resource gemを使用しています。Chrome でデバッガーを起動すると、コンソールに次のように入力します。

res.hello()

私は得る:

TypeError: Object function RailsResource(value) { angular.extend(this, value || {}); } has no method 'hello'

なぜこれが起こっているのかわかりません。私は一種の新しい JavaScript であるため、基本的にプロトタイプについて何かを理解していない可能性があります。または、角度やレールの問題である可能性があります。

ありがとう

4

1 に答える 1

0

プロトタイプ プロパティは、関数でのみ使用できます。自問する最初の基本的な質問は、

railsResourceFactory({url: '/users', name: 'user'});

関数/コンストラクタを返しますか? いいえ、違います。リソース オブジェクトを返します。古典的な OOP 言語を使用している場合、prototype プロパティはクラスでのみ使用でき、オブジェクトでは使用できないとだけ言っておきましょう。現在扱っているオブジェクトのプロトタイプに引き続きアクセスできるようにしたい場合は、アクセスできます。それを呼び出すことによって

object.constructor.prototype

そのため、呼び出すことで達成しようとしていることを達成できます

res.constructor.prototype.hello= function () {
        return "hello";

    }; 
于 2013-02-27T11:21:58.387 に答える