注意看js中对象的种类 大概分为以下三种 内置的:像数组、number ; 宿主环境:浏览器运行环境下的浏览器的对象,比如window、document ; 自己创建的:有三种方式
下面介绍自己创建的三种方法:
第一种方法:字面量创建方法:
1 <html> 2 3 <head> 4 <title>Object</title> 5 </head> 6 <body> 7 8 <script type="text/javascript"> 9 10 var p = { 11 name:"cj", 12 work:function () { 13 console.log("working..."); 14 }, 15 _age:18, //age:18 这样会让别人很好没有限制的修改,比如别人可以修改成-1、200这样的 16 //下划线的_age 从编码上可以用,但是 17 //但是它的意思是告诉别人不要用这个属性,算是一种约定,改用get set的方式 18 get age(){ 19 return this._age; 20 }, 21 set age(val){ 22 if(val <0 || val >150){ 23 throw new Error("invalid value"); 24 }else{ 25 this._age = val; 26 } 27 }, 28 address:{ 29 home:"jiating", 30 office:"office" 31 32 } 33 34 }; 35 36 p.work(); 37 console.log(p.age); 38 console.log(p["age"]); 39 40 //级联访问 41 console.log(p.address.home); 42 43 // 一种链式写法:输出的result值是jiating 44 // 这种方式 中途任何一种方式为空 就会把空返回给result 如果都不为空则返回最后一个 45 var result = p && p.address && p.address.home; 46 console.log(result); 47 48 // 第二种访问对象属性的方法 是通过 中括号 内 加双引号 记得用字符串 要加双引号 49 var o={1:"abc"}; 50 console.log(o["1"]); 51 var pname="1"; 52 console.log(o[pname]); //这种来自于变量的对象属性 用这种方式 很常用很重要 一定要掌握 53 </script> 54 </body> 55 </html>
第二种方法:通过object函数
新增成员的其他方法:
默认的writable就是false 下面举例证明改不了 篮球为足球
一次性加多个:
通过get set的方式:
对象的基本操作:
遍历:
sx相当于属性名,这个循环里就用到了 中括号属性的方式 p[sx]
发现并没有上面后来定义的salary,gender,height,因为
因为默认的 enuerable 可枚举属性也为false 所以 无法遍历出来
除了可枚举无法遍历以外 还有个就是它的遍历结果是无序的 要想使它有序起来,可以有一个办法:
通过js提供的keys函数 把对象的key变成一个数组,然后再对数组进行排序之后 再遍历。
判断是否存在某个属性的2种方法: 存在即返回 true
删除成员:
writable:是否可以修改
enuerable:是否可以枚举
configurable:如果属性设置为false 那么该属性就不能被删除 如果设置为true 就是可以重新用defineProperty重新配置
查看属性的基本情况的方法:
字面量创建和 new Object()方式创建对象是一样的:
function Function()是最顶级的构造器
instanceof 和构造器紧密相关:
第三种创建对象的方式:对象工厂的方式
JS中的类:通过函数实现 注意Person 既然是类 那就P是大写开头,属性不能通过var创建 要通过this来创建指向这个对象
共同的东西: 都只有一个人头:
prototype是什么?
只有函数才有prototype:
prototype指向的是一个对象:证明:
所以两种方式都可以找到headcount:
这种function Person(){...} 我们称之为 伪类 因为js里面没有类这个概念 重要的是通过这个产生的对象和这个类函数 并没有什么关系 这是关键,
真正和对象有关系的其实是原型,所以称函数类为伪类
p里的name并没有改变 就可以证明