<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 403, comments - 310, trackbacks - 0, articles - 7
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JavaScript 學習 - Object Basics

    Posted on 2007-05-04 23:06 ZelluX 閱讀(458) 評論(0)  編輯  收藏 所屬分類: Web
    1. 面向對象語言的四個要素:封裝、聚合(Aggregation)、繼承、多態。
    ps. Aggragation - the capability to store one object inside of another object
    (貌似這本書并沒有區分Object-based和Object-oriented)

    2. 創建對象
    基本和Java一樣,但對于無參構造器,也可以使用類似Delphi的沒有括號的語法。
    var oStringObject = new String;

    3. ECMAScript也有垃圾收集機制,不過早期版本的瀏覽器不支持。

    4. 由于弱類型機制,ECMAScript不支持早期綁定,因此對象的方法和屬性可以在運行期定義。

    5. ECMA-262定義的基礎類:
    Object, Function, Array, String, Boolean, Number, Date, RegExp, Error, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError

    6. String類的方法:
    join, split, concat, slice, push(), pop(), shift(), unshift(), reverse(), sort() 方法略,還有個貌似挺麻煩的splice方法。

    7. Data類
    翻了下,發現顯示當前時間只要new Date().toLocaleTimeString()就行了,寫Project2時土了

    8. Global類
    因為在JavaScript中并沒有單獨存在的函數,所有的函數都必須是已經存在的對象所屬的函數。
    于是有了Global類,包含所有“獨立”函數的類。
    貌似Global類的函數比較有用
    a)
    var sUri = “http://www.wrox.com/illegal value.htm#start”;
    alert(encodeURI(sUri));
    alert(encodeURIComponent(sUri));
    輸出:
    http://www.wrox.com/illegal%20value.htm#start
    http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
    區別在于encodeURI不處理屬于URI的特殊字符,如;/?:;而encodeURIComponents處理所有特殊字符。
    相應的有decodeURI和decodeURIComponents方法。
    b)
    eval 方法
    很強大,但要小心使用,容易被注入惡意代碼。

    9. Math 類
    用的時候再查API吧。。。

    10. 作用域
    a) JavaScript 所有的元素都是public的。無疑這會增加編程的難度,于是有了一種約定,即用兩個下劃線修飾命名“私有”變量。如
    obj.__color__= "red";
    就表示color是obj的一個私有變量(注意這只是一個約定,意味著其他程序員不應該使用這個變量)
    也有寫成obj._color的。
    b) JavaScript 也沒有嚴格意義上的static域。
    function sayHi() {
       alert(“hi”);
    }


    sayHi.alternate 
    = function() {
       alert(“hola”);
    }
    ;

    sayHi(); 
    //outputs “hi”
    sayHi.alternate(); //outputs “hola”
    這里,alternate實際上是函數sayHi的一個方法。

    11. 還是創建對象
    由于JavaScript并沒有提供真正意義上的構造方法,開發者們使用了不同的模式創建對象(怎么老覺得JavaScript這個語言是開發者在不斷適應它,而不是它不斷適應開發者呢 -,-)
    a) Factory
    function createCar(sColor, iDoors, iMpg) {
        
    var oTempCar = new Object;
        oTempCar.color 
    = sColor;
        oTempCar.doors 
    = iDoors;
        oTempCar.mpg 
    = iMpg;
        oTempCar.showColor 
    = function () {
            alert(
    this.color)
        }
    ;
        
    return oTempCar;
    }


    var oCar1 = createCar(“red”, 423);
    var oCar1 = createCar(“blue”, 325);
    oCar1.showColor(); 
    //outputs “red”
    oCar2.showColor(); //outputs “blue”
    另外也可以把showColor這個方法在外部聲明,然后使用oTempCar.showColor = showColor;
    b) Constructor
    function Car(sColor, iDoors, iMpg) {
        
    this.color = sColor;
        
    this.doors = iDoors;
        
    this.mpg = iMpg;
        
    this.showColor = function () {
            alert(
    this.color)
        }
    ;
    }


    var oCar1 = new Car(“red”, 423);
    var oCar2 = new Car(“blue”, 325);
    c) Protopype
    function Car() {
    }


    Car.prototype.color 
    = “red”;
    Car.prototype.doors 
    = 4;
    Car.prototype.mpg 
    = 23;
    Car.prototype.showColor 
    = function () {
        alert(
    this.color);
    }
    ;

    var oCar1 = new Car();
    var oCar2 = new Car();
    這種模式的好處在于,允許instanceof操作符進行類型判斷。但也有缺陷,例如
    function Car() {
    }


    Car.prototype.color 
    = “red”;
    Car.prototype.doors 
    = 4;
    Car.prototype.mpg 
    = 23;
    Car.prototype.drivers 
    = new Array(“Mike”, “Sue”);
    Car.prototype.showColor 
    = function () {
        alert(
    this.color);
    }
    ;

    var oCar1 = new Car();
    var oCar2 = new Car();
    oCar1.drivers.push(“Matt”);
    alert(oCar1.drivers); 
    //outputs “Mike,Sue,Matt”
    alert(oCar2.drivers); //outputs “Mike,Sue,Matt”
    原因在于prototype的drivers是所有Car共享的一個對象。
    d) constructor和prototype的結合
    function Car(sColor, iDoors, iMpg) {
        
    this.color = sColor;
        
    this.doors = iDoors;
        
    this.mpg = iMpg;
        
    this.drivers = new Array(“Mike”, “Sue”);
    }


    Car.prototype.showColor 
    = function () {
        alert(
    this.color);
    }
    ;

    var oCar1 = new Car(“red”, 423);
    var oCar2 = new Car(“blue”, 325);
    oCar1.drivers.push(“Matt”);
    alert(oCar1.drivers); 
    //outputs “Mike,Sue,Matt”
    alert(oCar2.drivers); //outputs “Mike,Sue”
    That's more like it.
    內存沒有浪費,也沒有因為共享對象的問題,也可以使用instanceof操作符。
    e) 貌似還不夠 --動態創建
    function Car(sColor, iDoors, iMpg) {
        
    this.color = sColor;
        
    this.doors = iDoors;
        
    this.mpg = iMpg;
        
    this.drivers = new Array(“Mike”, “Sue”);
        
    if (typeof Car._initialized == “undefined”) {
            Car.prototype.showColor 
    = function () {
                alert(
    this.color);
            }
    ;
            Car._initialized 
    = true;
        }

    }
    這樣就產生了類似static的效果,Car.prototype的內容只需在第一次創建對象時被初始化。
    f) 改版后的Factory模式
    function Car() {
        
    var oTempCar = new Object;
        oTempCar.color 
    = “red”;
        oTempCar.doors 
    = 4;
        oTempCar.mpg 
    = 23;
        oTempCar.showColor 
    = function () {
            alert(
    this.color)
        }
    ;
        
    return oTempCar;
    }
    不建議使用,除非實在需要(貌似和XML有關)

    12. 修改對象
    比較簡單,直接帖幾個例子
    Object.prototype.showValue = function () {
        alert(
    this.valueOf());
    }
    ;

    var str = “hello”;
    var iNum = 25;
    str.showValue(); 
    //outputs “hello”
    iNum.showValue(); //outputs “25”
    Function.prototype.toString = function () {
        
    return “Function code hidden”;
    }
    ;

    //The previous code is perfectly legal and works as expected:
    function sayHi() {
        alert(“hi”);
    }

    alert(sayHi.toString()); 
    //outputs “Function code hidden”

    學了不少,明天開始看繼承,恩
    主站蜘蛛池模板: 中文字幕在线免费播放| 国产色在线|亚洲| 国产精品极品美女自在线观看免费| 两性色午夜免费视频| 无码国产亚洲日韩国精品视频一区二区三区| 亚洲一区免费视频| 国产精品视频永久免费播放| 欧洲精品免费一区二区三区| 亚洲欧美第一成人网站7777| 野花高清在线电影观看免费视频| 亚洲最大成人网色香蕉| 国产免费看JIZZ视频| 亚洲熟妇AV乱码在线观看| 免费无码又爽又刺激高潮的视频| 亚洲GV天堂无码男同在线观看| 国产高清在线免费视频| 亚洲第一页在线观看| 久久受www免费人成_看片中文| 国产专区一va亚洲v天堂| 999国内精品永久免费视频| 亚洲成a人片在线观看国产| 亚洲精品韩国美女在线| 精品女同一区二区三区免费站| 亚洲白嫩在线观看| 韩国欧洲一级毛片免费 | 57pao国产成视频免费播放| 亚洲欧洲日产专区| 中国一级毛片免费看视频| 亚洲国产精品无码av| 亚洲AV成人精品一区二区三区| 拍拍拍无挡免费视频网站| 日本黄页网站免费| 一级黄色片免费观看| 婷婷精品国产亚洲AV麻豆不片| 91成年人免费视频| 国产亚洲成在线播放va| 亚洲va中文字幕无码久久| 久久久久久久久免费看无码| 狠狠热精品免费观看| 亚洲成电影在线观看青青| 国产乱子伦精品免费女|