0

私は THREE.JS に基づいたこの OOP スキームを持っています。将来これを使用する際に問題が発生するかどうかを知る必要があります。

var TESTOOP = TESTOOP || { VERSION: '0.1.1' };


//______________________________________________________________________
//OBJECT ROOT CLASS
//______________________________________________________________________
TESTOOP.Object = function(miId){

    //VARS________________________________
    //PRIVATE
    var enable = false;

    //PUBLIC
    this.miId = miId;


    //GETTERS & SETTERS __________________
    this.get_enable = function() {
        return enable;
    };
    this.set_enable = function(val) {
        enable = val;
    };
    this.get_miId = function() {
        return this.miId;
    };
    this.set_miId = function(val) {
        this.miId = val;
    };
};

//METHODS
TESTOOP.Object.prototype = Object.create( TESTOOP.Object.prototype );
TESTOOP.Object.prototype.testNoOverwrite = function (val) {
    console.log("Object.testNoOverwrite (val *4): " + val*4);
};
TESTOOP.Object.prototype.testOverwrite = function () {
    console.log("Object.testOverwrite ID: " + this.miId);
};
TESTOOP.Object.prototype.testOverwriteArgs = function (val) {
    console.log("Object.testOverwriteArgs (val*2): " + val*2);
};






//______________________________________________________________________
//OBJECT CLASS EXTEND & OVERWRITE METHODS
//______________________________________________________________________
TESTOOP.ObjInstance =  function (miId) {
    TESTOOP.Object.call(this, miId);
};
TESTOOP.ObjInstance.prototype = Object.create(TESTOOP.Object.prototype);


//REWRITE METHODS
TESTOOP.ObjInstance.prototype.testOverwrite = function () {
    //SUPER
    TESTOOP.Object.prototype.testOverwrite.call(this);
    console.log("TESTOOP.ObjInstance.testOverwrite ID:" + this.miId);
};
TESTOOP.ObjInstance.prototype.testOverwriteArgs = function (val) {
    //SUPER
    TESTOOP.Object.prototype.testOverwriteArgs.call(this,val);
    console.log("TESTOOP.ObjInstance.testOverwriteArgs (val*3): " + val*3);
};




//______________________________________________________________________
//INTANCE TEST
//______________________________________________________________________
var ObjInstance = new TESTOOP.ObjInstance(0.1);
ObjInstance.set_enable(true);
ObjInstance.testOverwrite();
ObjInstance.set_miId(0.2);
console.log("TESTOOP.ObjInstance, is enable: " + ObjInstance.get_enable());
ObjInstance.testOverwrite();
ObjInstance.testOverwriteArgs(1);
ObjInstance.testNoOverwrite(1);

JSbin でこれを試すことができます: http://jsbin.com/apoped/1/edit

4

1 に答える 1

2

使用例から、標準の JavaScript オブジェクト モデルを使用できるように見えます。

https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Details_of_the_Object_Model

JavaScript で OOP を使用する方法を学んでいる場合は特に、興味深い内容です。

したがって、JavaScript で OOP を使用する予定がある場合は、まず標準モデルを使用することをお勧めします。上記のリンクをガイドとして使用し、この件に関するDouglas Crockfordの記事も参照してください。

あなたが理論家なら、プロトタイプベースの OOP に関するいくつかの古典的なテキストを読むこともできます ( Henry Liebermanが頭に浮かび、David Ungar のOrganizing Programs Without Classes )。

要約すると、ダグラス・クロックフォード自身の言葉で:

私は JavaScript を 8 年間書いていますが、uber 関数を使用する必要があると感じたことは一度もありません。スーパー アイデアは、古典的なパターンではかなり重要ですが、プロトタイプや関数型のパターンでは必要ないように見えます。JavaScript で古典的なモデルをサポートしようとした私の初期の試みは、間違いであると今では考えています。

本当にクラスベースの OOP を使用する必要がある場合は、John Resig の非常に優れた記事、Simple "Class" instancecationを読むことをお勧めします。

次に、独自のライブラリを作成する代わりに、実績のあるクラスベースのライブラリを使用することをお勧めします。

乾杯!

于 2013-02-22T17:18:58.223 に答える