码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-04-13 11:05:01      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:javascript   prototype   _proto_   defineproperty   configurable   

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()
技术分享

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

标签:javascript   prototype   _proto_   defineproperty   configurable   

原文地址:http://blog.csdn.net/shilu89757/article/details/45021677

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!