一、函数
//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); //输出反序列化后的对象的属性