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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。