JavaScript 学習する
JavaScript は、大きく 3 つの異なる部分に分けることができます: コア (ECMAscript)、テキスト オブジェクト (DOM)、ブラウザ オブジェクト (BOM)
コア (ECMAscript): キーワード、ステートメント、演算子、オブジェクト
テキスト オブジェクト (DOM) : DOM は、ページ全体をノードレベルで構成されるドキュメントに変換します。
解析は W3C html dom 標準に従います。
W3C dom リファレンスでは、DOM ノードの説明
BOM ブラウザ オブジェクト、ポップアップの新しいブラウザ、ブラウザの設定サイズに特別な注意が払われています。
コア (ECMAscript) グローバル組み込みオブジェクト。
メソッド: parseInt()、isNan()、encodeURI()...などはすべてこのオブジェクトのメソッドです。
eval("alert('hi')"); のような動的言語のシンボルである eval(); に特に注意してください。ただし、このメソッドは非常に悪質です (セキュリティ面で)。
テキスト オブジェクト (DOM) の説明:
<bookstore> <book category="cooking"> <title lang="ja">まいにちイタリア語</title> <著者>ジャーダ・デ・ラウレンティス</著者> <年>2005</年> <価格>30.00</price > </book> </bookstore>
1. ECMAscript の基本
$ 変数の弱い型の指定: var iOuouValue=100;
$ はセミコロンの有無にかかわらず行を終了できますが、onsubmit="javascript:function();return false;" には
特別な注意が必要です。
"typeof" var test=1; //出力 "未定義"
"NaN" - 数値ではありません -> isNan("blue"); // 出力 "true" ->isNan("123"); ; //「false」を出力します
。 var o = new Object();
ここで、通常作成する関数がオブジェクトであるという特別な説明をします。
この var a = {name:"Liu Kaiyi"} は var a = function(){this.name="Liu Kaiyi"}; と同じです
。 name:"test" ,pass:"123456",addr:"bj"} //これは何ですか? ! json
var str = '{name:"test",pass:"123456",addr:"bj"}' の場合、
var objectBean = eval(str); //
ドメイン概念
を
使用したオブジェクト objectBea.name は次のとおりです。= テキスト/JavaScript>
var sMessage = 'こんにちは';
関数 setSomething() {
sColor = '赤';
sMessage = 'Hello World!';
}
set何か();
alert(sMessage); //ハローワールド!
アラート(sColor);
</SCRIPT> <SCRIPT type=text/javascript>
var sMessage = 'こんにちは';
関数 setSomething() {
var sColor = '赤';
sMessage = 'Hello World!';
}
set何か();
alert(sMessage); //ハローワールド!
アラート(sColor); // 何もありません
</SCRIPT>
<SCRIPT type=text/javascript>
var sMessage = 'こんにちは';
関数 setSomething() {
var sColor = '赤';
var sMessage = 'Hello World!';
}
set何か();
アラート(sMessage); //こんにちは
アラート(sColor); // 何もありません
</スクリプト>
オブジェクト指向の基礎を築く: オブジェクト プロトタイプ タイプのオブジェクト アプリケーション。 Reference
// 最も単純な継承
オブジェクト.プロトタイプ.inObj = 1;
関数 A()
{
this.inA = 2;
}
A.prototype.inAProto = 3;
B.prototype = new A // A を B のプロトタイプ チェーンに接続します。
B.prototype.constructor = B;
関数 B()
{
this.inB = 4;
}
B.prototype.inBProto = 5;
x = 新しい B;
document.write(x.inObj + ', ' + x.inA + ', ' + x.inAProto + ', ' + x.inB + ', ' + x.inBProto)
; 、5
//信頼性を高めるhttp://www.json.org/json.js
Object.prototype.toJSONString = function (filter) { return JSON.stringify(this, filter) }; 次に、bean.toJSONString() を使用します。そうじゃない?
$ 引数
関数 getFun(){alert(arguments.length);} ;
getFun("xx") //出力 1
getFun("xx",23) //出力 2
$ ステートメント;
for(var i=0i<iCount;i++) または for(attr in object) の特別な命令の下。
退屈している場合は、 for( sProp in window ){alert(sProp+"Hey, Please!");} // JavaScript の反映を見てください。
オブジェクト指向:
var bean = new Bean();
1.ファクトリメソッド
関数getAttr(){
alert(this.attr)
関数
Bean(tattr){
var bean = 新しいオブジェクト;
bean.getAttr
= getAttr
;
基本
的にはオブジェクト指向の模倣版です
2. 関数の構築
Bean(tattr){
this.attr = tattr;
bean.getAttr = function(){
alert(this.attr)
}
}
上記 2 では、Bean オブジェクトが作成されると、メソッドは「関数を繰り返し生成します」 「!
3. プロトタイプ モード
関数 Bean(){}
Bean.prototype.attr = "";
Bean.prototype.getAttr=function(){alert(this.attr);}
「生成された関数の重複」問題は解決しましたが、新たな問題 Bean.prototype.getArray = new Array();
その新しいオブジェクト bean1 と bean2 は、新しい配列空間を共有します (これは見たくありません)。
4. 混合モデル:) 笑
function Bean(){
this.attr= "";
this.getArray=新しい配列;
Bean.prototype.getAttr=function(){alert(this.attr);
}
5. 動的プロトタイプ (これからは真のオブジェクト指向になることに注意してください!!!)
function Bean(){
this.attr= "";
this.getArray=new Array
//ロード時のクラスロード
;
if(typeof Bean._initialized == "未定義" ){
Bean.prototype.getAttr=function(){alert(this.attr);};
Bean._initialized= true
;
}
/************************************************ ***** ***************/
オブジェクトの継承
1. オブジェクトのなりすまし! ! (多重継承をサポートでき、copycat は非常に強力です)
関数クラスA(sstr){
this.color = sstr;
this.sayColor = function(){
alert(this.color);
};
関数クラスC(){
}
関数 classB(){
this.newMethod
=ClassA;
this.newMethod を削除します。
this.newMethod =ClassC ;
this.newMethod()
を削除します。
this.arrt = "グーグル";
}
2.call() apply() もコピーキャットです。
function classA(sstr){
this.color = sstr;
this.sayColor = function(str){
alert(str+this.color);
};
}
function classB(){
// this.newMethod =ClassA ;
// this.newMethod();
// this.newMethod ;
//classA.apply(this,"red
");
"赤"))
this.arrt = "百度";
}
3. オーソドックスな継承プロトタイプチェーン (ただし多重継承はサポートしていません)
関数 classA(){this.oo="テスト";}
classA.prototype.color = "赤";
関数クラスB(){}
classB.prototype = 新しいクラスA;
classB.prototype.sayName = function(){
アラート( this.color );
}
varbb = 新しいクラスB;
bb.sayName(); // 赤を出力します。
アラート(bb.oo); //出力テスト
アラート(bbインスタンスオブクラスA); //出力true
alert(bb インスタンスオブクラス B); // true を出力します。
4.もっと継承したいなら! !そしてinstanceofもサポートします
混合方法:
関数クラスA(){}
関数クラスB(){}
関数クラスC(){
classA.call(this);
classC.call(this);
}
classC.prototype = new classA;//instanceof は A にのみ使用できることに注意してください