0

私は次のように定義されたクラスを持っています:

function MyClass() {

}

MyClass.prototype = {
       init: function() {
                 alert('My parent class!');
       },
       method1: function() {},
       method2: function() {}
};

およびプロパティ オブジェクト:

{
     init: function() {
               MySubClass.superclass.init.apply(this, arguments);
               alert('test!');
     },

     test: function() {
               alert();
     }
}

そして、小道具(オブジェクト)で基本クラス(MyClass)を拡張し、新しい拡張サブクラスを(MySubClassに)返す関数が必要です:

MySubclass = extend(MyClass, {
     init: function() {
               MySubClass.superclass.init.apply(this, arguments);
               alert('test!');
     },

     test: function() {
               alert();
     }
});

コンストラクターは、(init からの) 新しいコンストラクターに置き換える必要があります。

正しい方法が必要です。

なぜうまくいかないのでしょうか?

extend: function(bc, o) {
        // result class (apply only first constructor)
        var cls = function() {};
        cls.prototype = bc.prototype;

        for (var k in o)
            cls.prototype[k] = o[k];

        cls.superclass = bc.prototype;

        return cls;
    }
4

4 に答える 4

0

ライブラリの使用を受け入れる場合は、 underscore.jsの _.extend を使用してください。それ以外の場合は、次のコードをコードベースに追加してください:

extend = function(obj) {
    each(slice.call(arguments, 1), function(source) {
      if (source) {
        for (var prop in source) {
          obj[prop] = source[prop];
        }
      }
    });
    return obj;
  };
于 2013-11-14T17:17:58.770 に答える
0

jQuery でタグ付けされているようです。実際に jQuery を使用している場合は、$.extendの使用に興味があるかもしれません。

于 2013-11-14T17:18:17.717 に答える
0

これを見てください:https://github.com/haroldiedema/joii

var BaseClass = function() 
{
    this.some_var = "foobar";

    /**
     * @return string
     */
    this.someMethod = function() {
        return this.some_var;
    }
};

var MyClass = new Class({ extends: BaseClass }, function()
{
    /**
     * @param string value
     */
    this.__construct = function(value)
    {
        this.some_var = value;
    }

})

使用法:

var obj = new MyClass("Hello World!");
console.log( obj.someMethod() ); // Hello World!
于 2014-01-22T16:00:01.903 に答える