js函數對象


一、函數

 //function測試

 //函數是可以嵌套的
    function FuncTest() {
        function square(x) { return x * x; }
        return square(10);
    }
    FuncTest();

  //在函數體內可以通過arguments.length獲取傳入函數的實參個數
  function fun1(x, y){
      console.log(arguments.length);
  }
  fun1(10,1);

  //將函數綁定到對象里
  var fun2 = function(){
      console.log(this.name);
  }
  var o = {name: "張三", fn: fun2};
  o.fn();

二、對象

1、創建對象

  1、對象直接量。

    var point = { x:0,y:0 };  //point就是一個對象,跟C#不同,它不需要一定有類才能創建對象。

  2、通過new創建對象

    var d = new Date();    //創建一個Date對象

  3、原型

    Object.prototype  //用於獲取對象原型的引用。所有對象都直接或間接繼承自Object.prototype,相當於C#中的System.Object();

    通過new Date()創建的對象同時繼承自Date.prototype和Object.prototype。

  4、Object.create()

    Object.create()是一個靜態函數,可以用它創建一個新對象。

2、屬性的讀取和設置

  1、屬性的讀取有兩種方法。可以通過"."和"[]"來讀取。

    如:var author = book.author;

      var author = book["authoe"];

    設置也一樣:

      book.author = "劉德華";

      book["author"] = "劉德華";

    注意,如果對象的屬性名與保留字一樣,則必須通過方括號讀取。

      如:book["class"];

     另外用方括號訪問就個好處,就是在運行時確定屬性名如book["author" + 1];

  2、繼承

    如果要查詢對象o的屬性x,如果o沒有屬性x,則會到o的原型去查,一級一級往上,直到Object.prototype。

        var o = {};
        o.x = 1;
        var p = Object.create(o);
        p.x = 2;         //改變了繼承的屬性x
        document.write(p.x);  //輸出2,p.x繼承自o.x
        var q = Object.create(o);
        document.write(q.x);  //輸出1,p改變的是自己x,改變不了原型的x

3、刪除屬性

    delete()   delete()方法只能夠刪除自有屬性,不能夠刪除繼承屬性。delete()只是斷開屬性和宿主對象的聯系,而不回去操作屬性中的屬性。

        var book = {
            author:"劉德華",
            number:123
        }
        delete book.author;        //此行代碼也可寫成delete book["author"]
        document.write(book.author);  //book.author的值為undefined,因為已經被刪除了

4、檢測屬性

    in:檢測某對象是否含有某個屬性

        var o = {
            x:1
        }  
        document.write("x" in o);  //返回true  x是o的一個屬性
        document.write("y" in o);  //返回false  y不是o的屬性

    hasOwnProperty() 檢測對象中是否含有某屬性

        var o = {
            x : 1
        }
        document.write(o.hasOwnProperty("x"));  //返回true  o中含有名為"x"的屬性
        document.write(o.hasOwnProperty("y"));  //返回false  o中不含有名為"y"的屬性

    get() set()屬性訪問器  沒有相應的get(),set()則為只讀,或只寫屬性。

        var o = { 
            x: 1,
            get getx(){ return this.x; },
            set setx(n){this.x = n;}
         };
         document.write(o.getx);  //讀取屬性值,返回1
         o.setx = 2;         //如果將set setx(n)這行注釋,則這行代碼可以相當於不存在,設置無效。x依然為1,但不會報錯。
         document.write(o.getx);  //再次讀取返回2

5、屬性的特性

    writeable:是否可寫。

    enumerable:是否可枚舉。

    configurable:是否可配置。

6、對象的序列化

  這個東西非常有用,能夠將對象序列化成字符串之后傳輸,也能夠將對象以字符串的格式存在cookie里,拿出來后再反序列化成對象。

    JSON.stringify()   序列化對象(對象轉成字符串便於傳輸)

    JSON.parse()    反序列化對象(字符串轉換成原對象,是源對象深拷貝)

            var man = { name: "張三", Age: 24 };
            var str = JSON.stringify(man);    //將對象man序列化成JSON字符串
            document.write(str);
            var newman = JSON.parse(str);     //將字符串反序列成對象
            document.write("<br/>" + newman.name + "," + newman.Age);  //輸出反序列化后的對象的屬性

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM