また、特殊なオブジェクトを使用している記事をインターネットで見かけました。クラスを作成するためのコードは次のとおりです:
コードをコピーします
コードは次のとおりです:
//
//オブジェクト属性のコピー メソッド。PrototypeJS の extend や Ext の Ext.apply など、多くのライブラリで実装されています。
//
function extend(des, src ) {
if (!des)
des = {};
if (src) {
for (var i in src) {
des[i] = src[i]; 🎜>}
}
return des;
}
var CC = {}; //グローバル変数
//
//create はクラスの作成に使用されます
/ /
CC.create = function(スーパークラス, コンストラクター){
var clazz = (function() {
this.initialize.apply(this, argument);
}); /パラメータがない場合は、クラスを直接返します。
if(arguments.length == 0)
return clazz;
//親クラスがない場合、コンストラクターは純粋なオブジェクトである必要があります。今回は、プロパティを直接コピーして返します。
if(!superclass){
return clazz; ,
sprPropty = superclass.prototype ;
if(sprPropty){
//親クラスのメソッドにアクセスするために使用されます
clazz.superclass = sprPropty
extend(absObj, sprPropty); >//プロパティ コンストラクターを呼び出してプロパティを作成します。これが実装の鍵です。
extend(absObj,constructor(sprPropty));
//サブクラス インスタンスは、obj.superclass を通じて親クラスのプロパティに直接アクセスします。
// あまり多くの参照を発生させたくない場合は、ほとんどの場合不要であるため、この文をコメントアウトすることもできます。
clazz.constructor =constructor;
}
return clazz;
}
//
//動物クラスを作成します
//
var Animal = CC。 create(null, {
//Attributes
footprint: '- - - - - - =',
//クラス初期化メソッド、必須。このメソッドは、new を使用してクラスを生成するときに自動的に呼び出されます。上記の定義を参照してください。
initialize: function(options){
extend(this , options);
alert('Animal 初期化メソッドが呼び出されます。'); function(){
alert('Animal Eat メソッドが呼び出されます。');
},
move : function(){
alert('このように移動しています ' this.footprint ' 。 ');
}
});
//
// Duke クラスを作成します
//
var Duke = CC.create(Animal, function(superclass){
//ここで、このクラスの各インスタンスによって共有されるいくつかのクラス グローバル静的データを定義できます。
//派生クラス インスタンスを含むインスタンス クラスを計算します。 >function classUtilityFuncHere(){ }
//クラス固有の属性を返します。
return {
//初期化メソッドを書き換えます
//@override
initialize : function(options) {
alert('Initializing Duke class..');
//親クラスの初期化を呼び出します。このメソッドは他のライブラリよりも単純で、親クラスが何であるかは関係ありません。 call(this, options);
//サブクラスが実行したいことを実行します。
alert('Duke の初期化メソッドが呼び出されます。');
//クラスの静的属性を読み取るか、変更します
static_instance_counter ;
},
//Duke 自身の移動メソッドを書き換えます。
move : function(){
this.footprint = this.footprint 'zzzzzzzz'; move.call(this);
},
//eat メソッドを書き換えます。親クラスのメソッドが呼び出されないことに注意してください。つまり、親クラスの Eat : function() が上書きされます。 {
alert('Duke は食事をしています..');
},
//現在初期化されている Duke クラスのインスタンスの数を表示する新しい Say メソッドを追加します。
say : function(){
alert('Duke インスタンスの数は ' static_instance_counter);
}
});
var DukeChild = CC.create(Duke, function(superclass){ return {
move : function(){
this.footprint = this.footprint ' =';
superclass.move.call(this);
say : function( ){
alert(this.msg || '');
}
});
(function test() {
var Animal = new Animal() ;
animal.eat();
var duke();
dukeA.move(); >dukeA.say();
var duke();
dukeB.say(); = new DukeChild({msg : '私は公爵の子です。'});
dukeC.say()
}); >