|
Posted on 2009-05-16 22:27 xcp 閱讀(270) 評論(1) 編輯 收藏 所屬分類: Javascript
首先介紹一個網站,我很多書本都是在上面下載的,很好。http://www.freebookspot.in/
我現在學習的書本是:Pro Javascript Design Pattern
首先簡單地為優(yōu)雅的Javascript代碼開個頭
1.隨意的Javascript,有表現力的Javascript
常用Javascript代碼:
1 var isIE = (document.all) ? true : false;
2
3 var $ = function (id) {
4 return "string" == typeof id ? document.getElementById(id) : id;
5 };
6
7 var Class = {
8 create: function() {
9 return function() {
10 this.initialize.apply(this, arguments);
11 }
12 }
13 }
14
15 var Extend = function(destination, source) {
16 for (var property in source) {
17 destination[property] = source[property];
18 }
19 }
20
21 var Bind = function(object, fun) {
22 return function() {
23 return fun.apply(object, arguments);
24 }
25 }
26
27 var Each = function(list, fun){
28 for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); }
29 };
我喜歡的定義類的方法:
var MyClass = Class.create();

MyClass.prototype =
 {
//construction function
initialize : function(para1, para2)
 {
this.property1 = para1;
this.property2 = para2;
},
//public function
fun1 : function()
 {
},
//private function
fun2 : function()
 {
}
};
//call 和 apply的意義與用法

//<input type="text" id="myText" value="input text">
 function Obj(){this.value="對象!";}
var value="global 變量";
 function Fun1(){alert(this.value);}

window.Fun1(); //global 變量
Fun1.call(window); //global 變量
Fun1.call(document.getElementById('myText')); //input text
Fun1.call(new Obj()); //對象!

//call函數和apply方法的第一個參數都是要傳入給當前對象的對象,及函數內部的this。后面的參數都是傳遞給當前對象的參數。
 var func=new function(){this.a="func"}
 var myfunc=function(x){
var a="myfunc";
alert(this.a);
alert(x);
}
myfunc.call(func,"var");
 /**//*可見分別彈出了func和var。到這里就對call的每個參數的意義有所了解了。

對于apply和call兩者在作用上是相同的,但兩者在參數上有區(qū)別的。
對于第一個參數意義都一樣,但對第二個參數:
apply傳入的是一個參數數組,也就是將多個參數組合成為一個數組傳入,而call則作為call的參數傳入(從第二個參數開始)。
如 func.call(func1,var1,var2,var3)對應的apply寫法為:func.apply(func1,[var1,var2,var3])

同時使用apply的好處是可以直接將當前函數的arguments對象作為apply的第二個參數傳入*/

隨意、寬松的表現1:Javascript的弱類型:null, undefined, boolean, number, String, Object, 特別的對象Array
隨意、寬松的表現2:匿名函數
//匿名函數的調用方法
(function(para1,para2)
 {
return para1 + para2;
})(1,3);
Javascript對象類型的不定性、可變性,即建造的類可以動態(tài)改變,即使已經聲明的對象也能隨改變的類而改變,如下:
 /**//* Class Person. */
 function Person(name, age) {
this.name = name;
this.age = age;
}
 Person.prototype = {
 getName: function() {
return this.name;
},
 getAge: function() {
return this.age;
}
}
 /**//* Instantiate the class. */
var alice = new Person('Alice', 93);
var bill = new Person('Bill', 30);

 /**//* Modify the class. */
 Person.prototype.getGreeting = function() {
return 'Hi ' + this.getName() + '!';
};

 /**//* Modify a specific instance. */
 alice.displayGreeting = function() {
alert(this.getGreeting());
}
與類的不定性相關的是,Javascript語言的另一特點,反射機制,即可以在運行時檢測類所具有的屬性和方法。
運用設計模式的三大原因:
可維護性
溝通交流性
性能追求
不使用設計模式的兩大原因:
復雜性
性能追求
名稱: ?4C.ESL | .↗Evon 口號: 遇到新問題?先要尋找一個方案乄而不是創(chuàng)造一個方案こ mail: 聯系我
Feedback
# re: Javascript設計模式學習系列 一 回復 更多評論
2009-05-30 18:11 by
哥們兒,只能說你是個強人!佩服!
|