1. 程式人生 > >js函式物件

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);  //輸出反序列化後的物件的屬性

 

from: https://www.cnblogs.com/SmileSunday/p/9204443.html