今天无意中放到道格拉斯的关于javascript面向对象的一篇文章
http://javascript.crockford.com/prototypal.html
突然燃烧起了自己看看现在的原生对象Object的具体问题。发现msdn上面也有啦,自己的js知识实在是太缺乏啦。
他老人家在08年写的,我居然都没有去研究Object里面的对象和属性 The problem with the object function is that it is global, and globals are clearly problematic. The problem with 、、/**Object.prototype.begetObject is that it trips up incompetent programs, and it can produce unexpected results when begetObject is overridden. So I now prefer this formulation: **/ if (typeof Object.create !== 'function') { Object.create = function (o) { function F() {} F.prototype = o; return new F(); }; } newObject = Object.create(oldObject); //测试了一番发现IE8还是不支持这些属性但是在msdn上面又看到这些属性,估计是在ie10或者9中才有这些东西,现在IE貌似已经跟标准慢慢在靠近啦。。 //msdn的描述 在以下文档模式中受支持:Internet Explorer 9 标准模式和 Internet Explorer 10 标准模式。Windows 应用商店 应用程序中也支持此项。请参见版本信息。 在以下文档模式中不受支持:Quirks、Internet Explorer 6 标准模式、Internet Explorer 7 标准模式、Internet Explorer 8 标准模式。 我也就顺着看看Object其他自己没有了解的东西,现在做移动混合开发正好需要这些知识,Object.create();直接就创建啦一个对象而且继承了父对象的原型属性,虽然没有继承父对象的静态属性,不过那个可以通过in来实现,继承的不多说。多舒服啊。 Object.seal(object);//用来是一个对象不可被编辑 Object.freeze(object)//相反 Object.isSealed(ob);//是否是不可编辑的 Object.isFrozen(ob);//是否是解封的 Object.preventExtensions(a);//是否让对象可继承 Object.isExtensible(a);//检测对象是否可继承 var a={aa:3};Object.preventExtensions(a);Object.isExtensible(a); false 也有很多比较实用的工具类 Object.keys({a:3,b:4});//获取对象的key 将一个或多个属性添加到对象,并/或修改现有属性的特性。 object.defineProperties(object, descriptors) object.defineProperty(object, descriptor) Object.getOwnPropertyNames(Object); ["seal", "isSealed", "defineProperties", "defineProperty", "getPrototypeOf", "getOwnPropertyNames", "getOwnPropertyDescriptor", "caller", "freeze", "keys", "length", "prototype", "is", "create", "isFrozen", "isExtensible", "preventExtensions", "name", "arguments"]