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