Dean Edwards--Base.js
5967 ワード
私は心から対象に向かうプログラマーです.そしてJavaScriptは継承に基づくプロトタイプをサポートします.不幸なことに、これは長い定義をもたらす. function アニマル(name) {} Animal.prototype.eat = function() {} Animal.prototype.say = function(message) { }、MyClass.prototypeの冗長コードなしで簡単にクラスを作成したいです. リロードされた関数に直接アクセスできるようにしたいです.(Javaのsuperのように) 原型構造段階において、呼び出し種類の構造方法を避けたいです. 静的属性と関数を簡単に追加したいです. 私はグローバル関数に頼らずにプロトタイプチェーンを作成する方式で上記の目的を達成したいです. 上記の目的を達成するためには、同情的なObject.prototypeを使用しないでほしいです. ベースクラス
JavaScriptのクラス(Base.js)を作成しました.簡単なJavaScript OOが私たちにもたらした苦痛(確かに苦しい)を願っています.これは簡単なクラスです.二つの実例関数とクラス関数を追加してObjectオブジェクトを拡張しました.
Baseクラスは二つの例示的な方法を定義している.
exted:この方法を呼び出すと、別のインターフェースでオブジェクトを拡張できます.
JavaScript OO :
JavaScriptのクラス(Base.js)を作成しました.簡単なJavaScript OOが私たちにもたらした苦痛(確かに苦しい)を願っています.これは簡単なクラスです.二つの実例関数とクラス関数を追加してObjectオブジェクトを拡張しました.
Baseクラスは二つの例示的な方法を定義している.
exted:この方法を呼び出すと、別のインターフェースでオブジェクトを拡張できます.
- var object = new Base;
- object.extend({
- value: "some data",
- method: function() {
- alert("Hello World!");
- }
- });
- object.method();
- // ==> Hello World!
base: , base :
- var object = new Base;
- object.method = function() {
- alert("Hello World!");
- };
- object.extend({
- method: function() {
- // call the "super" method
- this.base();
- // add some code
- alert("Hello again!");
- }
- });
- object.method();
- // ==> Hello World!
- // ==> Hello again!
base 。
クラスを
Baseクラスのextedメソッドを び すことにより、クラスを することができます.
- var Animal = Base.extend({
- constructor: function(name) {
- this.name = name;
- },
-
- name: "",
-
- eat: function() {
- this.say("Yum!");
- },
-
- say: function(message) {
- alert(this.name + ": " + message);
- }
- });
extend , Animal :
- var Cat = Animal.extend({
- eat: function(food) {
- if (food instanceof Mouse) this.base();
- else this.say("Yuk! I only eat mice.");
- }
- });
-
- var Mouse = Animal.extend();
クラスの でexted に される のパラメータは、クラスインターフェース(javaのStatic に )を しています.
- var Circle = Shape.extend({ // instance interface
- constructor: function(x, y, radius) {
- this.base(x, y);
- this.radius = radius;
- },
-
- radius: 0,
-
- getCircumference: function() {
- return 2 * Circle.PI * this.radius;
- }
- }, { // class interface
- PI: 3.14
- })
base , Shape 。
initという の が されている ( な ではない)、クラスが されたときに に び されます. プロトタイプ (デリバティブ) は に び されません.
プライベートデータを むクラス
いくつかの がクラスを るのが きな 、 はクラスの で データを します. function Circule(radius) { } this.get Curcem ference = function() { } return 2 * Math.PI * radius; }; ;; You can achieve the さとめ レスリング using the ベース クラス: var Circule = Shape.exted({ } constructor: function(radius) { } this.exted({ } get Curcem ference: function() { } return 2 * Math.PI * radius; } }); } ); このコードはこのような には いものがありますが、ベースメソッドにアクセスすることができます.これは に に つと います.
のインスタンス
この に する くの えを えましたが、 に の を することによって、 のインスタンスクラスの を します.
- var Math = Base.extend({
- constructor: null,
- PI: 3.14,
- sqr: function(number) {
- return number * number;
- }
- })
これは の いOOフレームに って わるものです. が しかったブラウザにまたがるフレームではありません.
は スペースを っています.そこではずっとこのメカニズムに づいて かいものを しています.