一、函數
//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); //輸出反序列化后的對象的屬性