js深入浅出学习笔记(一)

js深入浅出
一. new Foo()创建的对象:
 1.该对象的原型会指向Foo 的构造器的prototype属性; 好处是 如果访问该对象的属性时,如果该对象不存在,会继续根据原型链查找Foo的prototype属性上的值;
2. 用 in 来判断该属性是否属于该对象时,是true,意思是该属性是该对象的原型链上的;
3. 给该对象的属性赋值时,会先查找原型链上是否存在该属性则修改,如果不存在,则只在该对象增加一个属性并赋值;
4. 用hasOwnProperty来判断该属性是否存在对象上还是原型链上;delete也只能删除对象上的属性,不会影响原型链上的属性;
5.用var obj=object.create({x:1})创建对象,该对象的原型指向参数,即obj.x=1;
而用字面量创建的对象的原型是object.prototype
二. 操作属性
1.for in 遍历属性时,有可能把原型链上的属性遍历出来,并且是无序的
2.delete 删除属性时,返回的ture表明这个对象已经没有该属性了,而不是删除成功的意思;
3.var descriptor = Object.getOwnPropertyDescriptor(Object,'prototype')属性描述器
4.隐式创建的全局变量,也可以用delete删除,   例如  i=1,delete i;
在eval()里用var创建的对象,也可以删除
5.propertyIsEnumerable()该属性是否可以被遍历
6.自定义属性可枚举 Object.defineProperty(cat,'price',{enumerable:false,value:100}), 用new或者字面量创建的对象或者赋值给属性时,默认都是可写可枚举的(标签全都是true),用define,则默认全是false
7. 在var obj = Object.defineProperty(Foo.prototype,'z',{get:function(){return {value:1}}})给某个原型链上的属性赋值(用get方法赋值),然后再给该obj.z赋值,是不成功的;也不会在obj上创建这个属性;要想赋值也只能通过obj. defineProperty
8.Object.keys()也是遍历
9. 属性标签:configurable=true,则可用defineProperty修改值或者其它属性标签,并且可以使用delete删除属性; 如果wirtable=true,则可直接使用obj.z来直接赋值
10. 对象标签:proto,class,extension--isExtensible()或者preventExtensions(),seal()比preventExtensions()更进一步,它把所有已有属性的configurable标签都改为false;而freeze()最牛,把所有的属性标签都是设置为false
11. 对象序列化:JSON.stringfy()

JSON.parse()解析,但是要求所有属性都加双引号

12. valueOf()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值