4

Javascriptで継承を実装するにはどうすればよいですか? Knockout.js を使い始めて、ViewModels/page を実装しています。ただし、すべてのViewModelで共有したい関数/コードがいくつかあります。

この場合、継承をどのように実装すればよいのでしょうか。

4

3 に答える 3

6

継承が必ずしも答えではないかもしれません。各 ViewModel が実装する必要があるすべてのメソッドを含むオブジェクト リテラルを作成してみませんか。私はノックアウトに慣れていませんが、ネイティブ js で行う方法を次に示します。

    var sharedMethods = {
             run: function () {},
             jump: function () {}
        };

    function Person () {};
    // Use jQuery's extend method
    // Now person has run, jump, and talk
    $.extend(Person.prototype, sharedMethods, {
        talk: function () {}
    });
于 2012-05-27T15:08:01.893 に答える
2

JavaScript はプロトタイプの継承を提供します。オブジェクトは他のオブジェクトから継承します。これはメソッドの継承では問題ありませんが、プロパティの継承では機能しません。

通常、メソッドを継承するには、次を使用できます。

function BaseViewModel() { 
   var self = this;
   self.name = ko.observable();
}

function Person() {
   var self = this;
   self.firstname = ko.observable();
}

Person.prototype = new BaseViewModel();

しかし、それにより、すべての人がプロトタイプとして同じオブジェクトを共有することになります! 1 人の名前を変更すると、その値がすべての人物に反映されます。jQueryのextendメソッドをよく使います。

function Person() {
   var self = this;
   $.extend(self, new BaseViewModel());

   self.firstname = ko.observable();

}

このようにして、BaseViewModel からの値が Person にコピーされます。

于 2012-09-25T22:07:25.787 に答える
0

これは crockford.com からのリンク
です。オブジェクト指向 Javascript について知るのに最適な場所です。
彼の方法は、最初は理解するのが少し複雑ですが。彼は JavaScript 言語の開発に継続的に関与し、データ形式 JSON (JavaScript Object Notation) を普及させ、JSLint や JSMin などのさまざまな JavaScript 関連ツールを開発したことで最もよく知られているため、最高のリソースの 1 つです。

于 2012-05-27T15:46:58.567 に答える