6

以下に示すように、Javascript クラスのメソッドを上書きできることを知りましたが、実際のコンストラクターはどうでしょうか。

可能であれば、クラスをインスタンス化せずに行うにはどうすればよいですか?

var UserModel = (function() {
  var User;
  User = function() {}; // <- I want to overwrite this whilst keeping below methods
  User.prototype.isValid = function() {};
  return User;
})();
4

2 に答える 2

8

オブジェクトを一時的に保存してprototypeから、コンストラクター関数を置き換えます。

var proto = UserModel.prototype;
UserModel = function () { /* new implementation */ };
UserModel.prototype = proto;
于 2012-11-14T21:39:52.517 に答える
0

基本的に、何もしない一時的な関数を作成し、そのプロトタイプに親クラスのプロトタイプを設定すると、コンストラクターを呼び出さずに基本クラスを親として使用できます。

子クラスのコンストラクターから親クラスのコンストラクターを参照する必要がある場合はFunction.prototype.apply、コンストラクター呼び出しを転送するために使用する必要があります。

Javascript 継承モデル :

// Base class

var Base = function ( ) {
    this.foo = 40;
};

Base.prototype.bar = function ( ) {
    return this.foo;
};

// Inherited class

var Child = function ( ) {
    Base.apply( this, arguments );
    this.foo += 2;
};

var F = function ( ) { };
F.prototype = Base.prototype;
Child.prototype = new F( );
于 2012-11-14T21:41:14.483 に答える