プロトタイプ クラス オブジェクト learning_prototype
/* Alex Arnell の継承実装に基づいています。 */
var Class = (function() {
//親のプロトタイプを一時的に保存します
function subclass() {} ;
//クラスを作成するメソッド
function create() {
varparent = null,properties = $A(arguments); //クラスを作成するときに指定するかどうかを確認します。 new class 親オブジェクト
//親クラスが指定されている場合は、値を親に代入します
if (Object.isFunction(properties[0]))
parent = property.shift(); >
//インスタンスの作成時に実際に返されるクラスで、初期化のために初期化メソッドが呼び出されます。
function klass() {
this.initialize.apply(this, argument); >}
//create メソッドを呼び出した後、addMethods メソッドを klass に追加します
//クラスレベルのメソッド展開のために addMethods メソッドを呼び出すこともできます
Object.extend(klass, Class .Methods);
// 返されたクラスに 2 つの属性を追加します。スーパークラス: 親クラス、サブクラス: サブクラスのコレクション
klass.subclasses = []; 🎜>//クラスを作成する場合 親オブジェクトを指定した場合、klassのプロトタイプに親オブジェクトのインスタンスを指し、プロトタイプチェーンの継承を実装します。
if (parent) {
subclass.prototype =parent.プロトタイプ;
klass.prototype = new subclass;
// 親クラスにサブクラスを追加し、親クラスのサブクラス コレクションを維持します
parent.subclasses.push(klass); >
//新しいクラスにメソッドを追加します
for (var i = 0; i
if (!klass.prototype.initialize)
klass.prototype.initialize = Prototype.emptyFunction
;
/*
* コンストラクターがそれ自体を指すように、新しいクラスのコンストラクターを修正します。ここで特に注意してください (次の行をコメントアウトした場合):
* var Person=Class. create();
* var p1=new person();
* alter(p1.constructor==person) //true
* var Man=Class.create(person)
* var m1=new Man();
*alert(m1.constrcutor==Man) //false
*alert(m1.constrcutor==person) //true
*alert(m1.constructor== p1.constrcutor) //true
*
* 問題が分かりましたか? Man のコンストラクターは実際には Person のコンストラクターを指しています
※ 問題の根源は klass.prototype = new subclass;
※ 詳しい理由は説明しませんので、「JavaScript 言語」を参照してください。本質とプログラミング実践』155~160ページ
*/
klass.prototype.constructor = klass;
return klass;
}
//クラス作成時にメソッドを追加新しいクラスに追加するか、クラスの作成後にクラスレベルのメソッドを追加します。
function addMethods(source) {
//新しいクラスの親クラスを取得します
var ancestor = this.superclass && this. superclass.prototype;
varproperties = Object.keys(source);
//なぜこのように書かれているのかわかりません。 、教えてください?
if (!Object .keys({ toString: true }).length) {
//新しいクラスが toString メソッドと valueOf メソッドをオーバーライドする場合、それらを追加します
if (source.toString != Object.prototype.toString)
properties.push("toString");
if (source.valueOf != Object.prototype.valueOf)
properties.push("valueOf"); >}
//新しいクラス宣言内のすべてのメソッドを走査します
for (var i = 0, length = property.length; i
//property は関数名、値は関数本体です
var property = property[i], value = source[property]
//このメソッドが親クラスの同じ名前のメソッドを呼び出す必要があるかどうかを決定します if (ancestor && Object.isFunction(value) &&
value.argumentNames ().first() == "$super") {
var Method = value;
//これは非常に重要です。
//このパラメータが親クラスの同じ名前のメソッドを指すように、$super パラメータを置き換えます。
//ここでは Function の Wrap メソッドを使用します。 Wrap メソッドの説明については、を参照してください。 to [プロトタイプ学習 - 関数オブジェクト]
/ /method は新しく定義されたメソッドなので、最初のパラメータは $super で、'=' から '.' までに返されるのはその同じ名前のメソッドです。親クラス
//最後に、ラップ メソッドを呼び出して $super を配置します。パラメータを親クラスの同じ名前のメソッドに置き換えます。これにより、サブクラスが $super() を呼び出したときに、同じ名前のメソッドが呼び出されます。親クラスは
と呼ばれます // ここの構造は素晴らしいです!Worth thinking about
value = (function(m) {
return function() { return ancestor[m].apply(this, arguments); };
})(property).wrap(method);
//Point the valueOf and toString of the newly generated value (i.e. the modified subclass method) to the method of the same name of the atomic class
🎜>value.valueOf = method.valueOf.bind(method);
value.toString = method.toString.bind(method);
}
//Add the method to the new class
this.prototype[property] = value;
}
return this;
}
//Return the callable method of Class
return {
create: create,
Methods: {
addMethods: addMethods
}
};
})();
var Person = Class.create({
initialize: function(name) {
this. name = name;
},
say: function(message) {
return this.name ': ' message;
}
});
// when subclassing, specify the class you want to inherit from
var Pirate = Class.create(Person, {
// redefine the speak method
//Note the usage of $super here, check the explanation in the source code Take a closer look
say: function($super, message) {
return $super(message) ', yarr!';
}
});
var john = new Pirate('Long John');
john.say('ahoy matey');
// -> "Long John: ahoy matey, yarr!"
john.sleep();
// -> ERROR: sleep is not a method
// every person should be able to sleep, not just pirates!
//This is The usage of addMethods can be extended at the class level.
Person.addMethods({
sleep: function() {
return this.say('ZzZ');
}
});
john.sleep();
Person.superclass
// -> null
Person.subclasses.length
// - > 1
Person.subclasses.first() == Pirate
// -> true
Pirate.superclass == Person
// -> true
The three examples cover the methods of the Class class. For detailed examples, please refer to: http://prototypejs.org/learn/class-inheritance

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです
