javascript object orentedは対象に向かってプログラミングします.
8260 ワード
使う?遣う new Object() を選択してオブジェクトを作成します
javascriptにはいくつかのオブジェクトを作成する方法があります.場合によっては違った方法があります.一番簡単なのは、 new 操作子、例えば:
文字でLiteralを記号する Notationオブジェクトを作成
文字記号でオブジェクトを作成することもできますが、javascript 1.2以上のバージョンです.作成形態は多様です.
使う?遣う new オペレータまたはテキストマークは、ユーザー定義のオブジェクトを作成するのが簡単であり、論理にも合致しています.しかし、最大の欠点は結果が多重化されないことです.また、簡単に異なるバージョンでオブジェクトを初期化して作成することもできません.例えば、上のように. の第一例は person の name いいえ 「Tim Scafe"は、オブジェクト全体を再定義する必要があります.
オブジェクトの構造と原型
OOPの世界では、以前の方法でオブジェクトを定義するには、多くの場合に制限があります.オブジェクトを作成する方法が必要です.タイプは再定義せずに複数回使用できます.オブジェクトは実例化時に毎回必要な値を割り当てることができます.この目標を達成するための標準的な方法は、オブジェクトコンストラクタ関数を使用することです.
一つのオブジェクトコンストラクタは規則的なjavascript関数にすぎません.それはコンテナ(パラメータを定義し、他の関数を呼び出すなど)のようです.この二つの違いはコンストラクタ関数が new オペレータが呼び出されました.
現実世界の猫を例に挙げましょう.猫の name 和 カラー 猫の属性です.meeyeow(猫の鳴き声)はその一つの方法です.重要なのはどんな種類の猫でも違う可能性があります. name 和 meey ow これらの特徴に適応したオブジェクトクラスを作成するために、オブジェクトビルダーを使用します.
コンストラクタはオブジェクトの青写真を作成しました.オブジェクト自体ではありません.
原型に方法を追加します.
上記の例では、オブジェクトの方法はコンストラクタで定義されています.もう一つの方法はプロトタイプを通して実現されます.xxx
プロトタイプはjavascript継承の形式です.対象を定義して、もう一つの方法を作ることができます.元のすべての対象の実例は共有されます.
最初のものを広げましょう. cat 対象.改名の方法を追加します. プロトタイプ の方式
原型を使う 再読み込み javascript オブジェクト
原型 カスタムオブジェクトと選択的なリロードオブジェクトの両方で動作できます. Date() または String これは果てしないかもしれない.
サブクラスとスーパークラス
JAVAで とC++の中には、クラスレベルに関する外在概念があります.
In Java and C++は、 there is an explicit concept 保存先 the クラス hierarchy. i.e. Every クラス can すばらしい a. スーパー クラス from which it inheits properties and methods. アンイ クラス can be exteded or sub-classed そ the reulting. subclass can inheit its parent's behavior As we すばらしい seen javascript supports プロトタイプ inherityance instead 保存先 クラス based. It's possible for inherityance ト happen other ways、 ホワイバー.
The フォローウイング is an example 保存先 inherityance through functions.
次の例では、functionによる継承方法を示します. .
(プロトタイプに基づく継承は多くのjavascriptの応用の場で非常に有用である.)
オブジェクトを結合配列として
あなたが知っているように、 (.)操作符は記憶用に使用できます.[] オペレータは配列を操作するために使用します.
<bragt;lt;!--
<bragt;
<bragt//// The se エリア the さとめ
<bragt;object.property
<bragt;object[property]
<bragt;
<bragt;//->
<bragt;
<bragt;lt;!--
<bragt;機能 Circule (xPoint、 yPoint、 ラジディウス {
<bragt;this.x = xPoint;
<bragt;this.y = yPoint;
<bragt;this.r = ラジディウス
<bragt;
<bragt;
<bragt;var aCircule = new Circule(5, 11, 99)
<bragt;alert(aCircle.x)
<bragt;alert(aCircule[x])
<bragt;//->
<bragt;
How ド I loop through properties in an object
You need ト アメリカ a. for/in loop.
私たちはforを通すことができます. オブジェクトの属性を巡回します.
<bragt;lt;!--
<bragt;
<bragt;var test Obj = {
<bragt;prop 1 : 「ハロー」
<bragt;prop 2 : 「ハロー2」
<bragt;prop 3 : new Aray(「ハロー」、1、2)
<bragt;
<bragt;for(x in test Obj) alert( x + 「-」 + test Obj[ x ] )
<bragt///>
<bragt;
<bragt;<!--
<bragt;var Circule = { x : 0, y : 1, ラジディウス: 2 } // another example
<bragt;
<bragt;for(p in Circule)
<bragt;alert( p + 「-」 + Circule[ p ] )
<bragt///>
<bragt;
The impotant thing ト notice is that in the object syntax the property is an identifer whers in the array syntax it a. string. The OB ベネフィット 保存先 using an array syntax ト access an object is because 保存先 the literal ダタ タイプ あなた can イージー cat ストリングス and プレイ アロント with them ト access an object For this ト ワーク with the スタンダード syntax an eval() would need ト be used.
注目すべきは、オブジェクトの属性はただの識別文字であり、1つの配列の中では文字列であっても、1つのliteralのデータタイプなので、配列を使用してオブジェクトを操作するのに有利です.標準的な語句にオブジェクトを容易にアクセスすることができます.このとき、eval関数は使用されます.
<bragt;<!--
<bragt;
<bragt;testObj = {
<bragt;prop 1 : 「ハロー」
<bragt;prop 2 : 「ハロー2」
<bragt;prop 3 : new Aray(「ハロー」、1、2)
<bragt;
<bragt;
<bragt;for(x in test Obj) alert( x + 「-」 + test Obj[ x ] )
<bragt;var プロ3 = testObj[prop 3]
<bragt;alert;
<bragt//alert;
<bragt;alert(typeof(prop 3);
<bragt;alert(eval(prop 3)[1];
<bragt;alert(typeof(eval(prop 3)[1])
<bragt;
<bragt///>
<bragt;
ネット上のものは間違いが多すぎます.jb 51.net修正後のテストです.
function Car(℃){this.doors=door;this.arr=new Aray(“aa”、“bb”);Car.prototype.shColor=function(){alert(this.lor);var car car car car 1=neCarCarCard=necacacacacacacacacacacacacatttttttttttCar========"cacacacacacacacacacacacacacacacacacacacacattttttttttttttttttttttttttttttttttttttttttttttt(「dd」);alert(car 1.arr.toString();car 1.showColor();/output:aa、bb、cc car 2.showColor();//output:aa,bb
[Ctrl+A全選注:外部Jsを導入するにはリフレッシュが必要です.]
javascriptにはいくつかのオブジェクトを作成する方法があります.場合によっては違った方法があります.一番簡単なのは、 new 操作子、例えば:
<br><!--
<br>
<br>person = new Object()
<br>person.name = "Tim Scarfe"
<br>person.height = "6Ft"
<br>
<br>person.run = function() {
<br>this.state = "running"
<br>this.speed = "4ms^-1"
<br>}
<br>
<br>//-->
<br>
この例では、personというオブジェクトを定義し、属性と方法を加えました.この例では、カスタムの方法には二つの属性があります.文字でLiteralを記号する Notationオブジェクトを作成
文字記号でオブジェクトを作成することもできますが、javascript 1.2以上のバージョンです.作成形態は多様です.
<br><!--
<br>
<br>// Object Literals
<br>
<br>timObject = {
<br>property1 : "Hello",
<br>property2 : "MmmMMm",
<br>property3 : ["mmm", 2, 3, 6, "kkk"],
<br>method1 : function(){alert("Method had been called" + this.property1)}
<br>};
<br>
<br>timObject.method1();
<br>alert(timObject.property3[2]) // will yield 3
<br>
<br>var circle = { x : 0, y : 0, radius: 2 } // another example
<br>
<br>// nesting is no problem.
<br>var rectangle = {
<br>upperLeft : { x : 2, y : 2 },
<br>lowerRight : { x : 4, y : 4}
<br>}
<br>
<br>alert(rectangle.upperLeft.x) // will yield 2
<br>
<br>//-->
<br>
文字記号は配列であり、任意のjavascript表現または値であってもよい.使う?遣う new オペレータまたはテキストマークは、ユーザー定義のオブジェクトを作成するのが簡単であり、論理にも合致しています.しかし、最大の欠点は結果が多重化されないことです.また、簡単に異なるバージョンでオブジェクトを初期化して作成することもできません.例えば、上のように. の第一例は person の name いいえ 「Tim Scafe"は、オブジェクト全体を再定義する必要があります.
オブジェクトの構造と原型
OOPの世界では、以前の方法でオブジェクトを定義するには、多くの場合に制限があります.オブジェクトを作成する方法が必要です.タイプは再定義せずに複数回使用できます.オブジェクトは実例化時に毎回必要な値を割り当てることができます.この目標を達成するための標準的な方法は、オブジェクトコンストラクタ関数を使用することです.
一つのオブジェクトコンストラクタは規則的なjavascript関数にすぎません.それはコンテナ(パラメータを定義し、他の関数を呼び出すなど)のようです.この二つの違いはコンストラクタ関数が new オペレータが呼び出されました.
現実世界の猫を例に挙げましょう.猫の name 和 カラー 猫の属性です.meeyeow(猫の鳴き声)はその一つの方法です.重要なのはどんな種類の猫でも違う可能性があります. name 和 meey ow これらの特徴に適応したオブジェクトクラスを作成するために、オブジェクトビルダーを使用します.
<br><!--
<br>
<br>function cat(name) {
<br>this.name = name;
<br>this.talk = function() {
<br>alert( this.name + " say meeow!" )
<br>}
<br>}
<br>
<br>cat1 = new cat("felix")
<br>cat1.talk() //alerts "felix says meeow!"
<br>
<br>cat2 = new cat("ginger")
<br>cat2.talk() //alerts "ginger says meeow!"
<br>
<br>//-->
<br>
ここで、関数 cat() はオブジェクトのコンストラクタです.その属性と方法は関数体でthisで定義され、オブジェクトのコンストラクタで定義されたオブジェクトを使用します. new 私たちはどのように多くのcatを定義しやすいですか? 各オブジェクトには自分の名前があります.これはオブジェクトビルダーが持ってくる柔軟性です.コンストラクタはオブジェクトの青写真を作成しました.オブジェクト自体ではありません.
原型に方法を追加します.
上記の例では、オブジェクトの方法はコンストラクタで定義されています.もう一つの方法はプロトタイプを通して実現されます.xxx
プロトタイプはjavascript継承の形式です.対象を定義して、もう一つの方法を作ることができます.元のすべての対象の実例は共有されます.
最初のものを広げましょう. cat 対象.改名の方法を追加します. プロトタイプ の方式
<br><!--
<br>
<br>cat.prototype.changeName = function(name) {
<br>this.name = name;
<br>}
<br>
<br>firstCat = new cat("pursur")
<br>firstCat.changeName("Bill")
<br>firstCat.talk() //alerts "Bill says meeow!"
<br>
<br>//-->
<br>
あなたが見ているように、私達はただ使います. キーワード プロトタイプ オブジェクト定義後すぐにchange Name方法を追加しました.この方法はすべてのインスタンスに共有されます.原型を使う 再読み込み javascript オブジェクト
原型 カスタムオブジェクトと選択的なリロードオブジェクトの両方で動作できます. Date() または String これは果てしないかもしれない.
サブクラスとスーパークラス
JAVAで とC++の中には、クラスレベルに関する外在概念があります.
In Java and C++は、 there is an explicit concept 保存先 the クラス hierarchy. i.e. Every クラス can すばらしい a. スーパー クラス from which it inheits properties and methods. アンイ クラス can be exteded or sub-classed そ the reulting. subclass can inheit its parent's behavior As we すばらしい seen javascript supports プロトタイプ inherityance instead 保存先 クラス based. It's possible for inherityance ト happen other ways、 ホワイバー.
The フォローウイング is an example 保存先 inherityance through functions.
次の例では、functionによる継承方法を示します. .
<br><!--
<br>
<br>// thanks to webreference
<br>
<br>function superClass() {
<br>this.supertest = superTest; //attach method superTest
<br>}
<br>
<br>function subClass() {
<br>this.inheritFrom = superClass;
<br>this.inheritFrom();
<br>this.subtest = subTest; //attach method subTest
<br>}
<br>
<br>function superTest() {
<br>return "superTest";
<br>}
<br>
<br>function subTest() {
<br>return "subTest";
<br>}
<br>
<br>
<br>var newClass = new subClass();
<br>
<br>alert(newClass.subtest()); // yields "subTest"
<br>alert(newClass.supertest()); // yields "superTest"
<br>
<br>//-->
<br>
継承に基づく原型は遠い. javascript アプリケーションは多くの場合に(プロトタイプに基づく継承は多くのjavascriptの応用の場で非常に有用である.)
オブジェクトを結合配列として
あなたが知っているように、 (.)操作符は記憶用に使用できます.[] オペレータは配列を操作するために使用します.
<bragt;lt;!--
<bragt;
<bragt//// The se エリア the さとめ
<bragt;object.property
<bragt;object[property]
<bragt;
<bragt;//->
<bragt;
<bragt;lt;!--
<bragt;機能 Circule (xPoint、 yPoint、 ラジディウス {
<bragt;this.x = xPoint;
<bragt;this.y = yPoint;
<bragt;this.r = ラジディウス
<bragt;
<bragt;
<bragt;var aCircule = new Circule(5, 11, 99)
<bragt;alert(aCircle.x)
<bragt;alert(aCircule[x])
<bragt;//->
<bragt;
How ド I loop through properties in an object
You need ト アメリカ a. for/in loop.
私たちはforを通すことができます. オブジェクトの属性を巡回します.
<bragt;lt;!--
<bragt;
<bragt;var test Obj = {
<bragt;prop 1 : 「ハロー」
<bragt;prop 2 : 「ハロー2」
<bragt;prop 3 : new Aray(「ハロー」、1、2)
<bragt;
<bragt;for(x in test Obj) alert( x + 「-」 + test Obj[ x ] )
<bragt///>
<bragt;
<bragt;<!--
<bragt;var Circule = { x : 0, y : 1, ラジディウス: 2 } // another example
<bragt;
<bragt;for(p in Circule)
<bragt;alert( p + 「-」 + Circule[ p ] )
<bragt///>
<bragt;
The impotant thing ト notice is that in the object syntax the property is an identifer whers in the array syntax it a. string. The OB ベネフィット 保存先 using an array syntax ト access an object is because 保存先 the literal ダタ タイプ あなた can イージー cat ストリングス and プレイ アロント with them ト access an object For this ト ワーク with the スタンダード syntax an eval() would need ト be used.
注目すべきは、オブジェクトの属性はただの識別文字であり、1つの配列の中では文字列であっても、1つのliteralのデータタイプなので、配列を使用してオブジェクトを操作するのに有利です.標準的な語句にオブジェクトを容易にアクセスすることができます.このとき、eval関数は使用されます.
<bragt;<!--
<bragt;
<bragt;testObj = {
<bragt;prop 1 : 「ハロー」
<bragt;prop 2 : 「ハロー2」
<bragt;prop 3 : new Aray(「ハロー」、1、2)
<bragt;
<bragt;
<bragt;for(x in test Obj) alert( x + 「-」 + test Obj[ x ] )
<bragt;var プロ3 = testObj[prop 3]
<bragt;alert;
<bragt//alert;
<bragt;alert(typeof(prop 3);
<bragt;alert(eval(prop 3)[1];
<bragt;alert(typeof(eval(prop 3)[1])
<bragt;
<bragt///>
<bragt;
ネット上のものは間違いが多すぎます.jb 51.net修正後のテストです.
function Car(℃){this.doors=door;this.arr=new Aray(“aa”、“bb”);Car.prototype.shColor=function(){alert(this.lor);var car car car car 1=neCarCarCard=necacacacacacacacacacacacacatttttttttttCar========"cacacacacacacacacacacacacacacacacacacacacattttttttttttttttttttttttttttttttttttttttttttttt(「dd」);alert(car 1.arr.toString();car 1.showColor();/output:aa、bb、cc car 2.showColor();//output:aa,bb
[Ctrl+A全選注:外部Jsを導入するにはリフレッシュが必要です.]