1.通过继承(Object.create())创建对象的好处?
防止函数库无意间或恶意的修改那些不受你控制的对象。不是将对象直接传入到函数,而是将它的继承对象传入,
函数读取到的实际上是继承来的值,如果给继承对象赋值,则影响到的是继承的对象,而不是当前对象本身。
1 var o = {}; 2 o.x = 1; 3 var p = inherit(o); 4 p.y = 2; 5 var q = inherit(p); 6 q.z = 3; 7 var s = q.toString(); //3 x为o的属性,y为p的属性,z才是q的属性 8 q.x + q.y 9 10 function inherit(p) { 11 if(p == null) throw TypeError(); 12 if(Object.create) return Object.create(p); 13 var t = typeof p; 14 if(t !== "objcet" && t !== "function") throw TypeError(); 15 function f() {}; 16 f.prototype = p; 17 return new f(); 18 19 }
2.如何防止查询属性报错
1 var len = book.subtitle.length; //null 和 undefined都没有属性,报错 2 //冗余但很易懂的方法 3 var len = undifined; 4 if(book) { 5 if(book.subtitle) len = book.subtitle.length; 6 } 7 //一种更简练的常用方法。 8 var len = book && book.subtitle && book.subtitle.length;
时间: 2024-12-29 12:47:43