javascript,ES5标准中新增的几种高效Object操作方法_第1页
javascript,ES5标准中新增的几种高效Object操作方法_第2页
javascript,ES5标准中新增的几种高效Object操作方法_第3页
javascript,ES5标准中新增的几种高效Object操作方法_第4页
javascript,ES5标准中新增的几种高效Object操作方法_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、详解javascript,ES5标准中新增的几种高效Object操作方法1、Object 对象 (JavaScript)提供对所有 JavaScript 对象通用的功能。(v=vs.94).aspx2、Object.create()概念:Object.create():是E5中提出的一种新的对象创建方式。语法:Object.create(proto , propertiesObject ),第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。propertiesObject 参数的详细解释:(默认都为false)。数据属性,writ

2、able:是否可任意写;configurable:是否能够删除,是否能够被修改;enumerable:是否能用 for in 枚举;value:值;访问属性:get(): 访问;set(): 设置示例如下: function Car(desc) this.desc = desc; this.color = 'red' Ctotype = getInfo:function() return 'A ' + this.color + ' ' + this.desc + '.' var car = Object.create(

3、Ctotype); car.color = 'blue' var info = car.getInfo(); console.log(info);/A blue undefined. var obj = a:function() console.log(100);/100 , b:function() console.log(200) , c:function() console.log(300) var newObj = ; newObj = Object.create(obj, t1: value:'yupeng', writable:true

4、, bar: configurable: false, get: function() return bar; , set: function(value) bar=value ) console.log(newObj.a();/undefined console.log(newObj.t1);/yupeng newObj.t1 = 'yupeng1' console.log(newObj.t1);/yupeng1 newObj.bar = 201; console.log(newObj.bar);/2013、Object.keys()Object.keys():返回一个由给定

5、对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。语法:Object.keys(obj)。参数:obj返回该对象的所有可枚举自身属性的属性名。 var arr = 'a','b','c' console.log(Object.keys(arr);/"0", "1", "2" / 类数组对象 var obj = 0 : "a&quo

6、t;, 1 : "b", 2 : "c" console.log(Object.keys(obj); / "0", "1", "2" / getFoo是个不可枚举的属性 var my_obj = Object.create(, getFoo : value : function () return this.foo ); my_obj.foo = 1; console.log(Object.keys(my_obj); / "foo"4、Ototype.isP

7、rototypeOf()isPrototypeOf:是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。语法:prototype.isPrototypeOf(object)。参数:prototype,必选。对象原型。 object,必选。另一个对象,将对其原型链进行检查。示例如下:function person(name,age) = name; this.age = age;var person1 = new person('xiaoming',23);console.log(totype.is

8、PrototypeOf(person1);/true;原型链的对象:person,对象实例;person15、Object.getPrototypeOf()getPrototypeOf:返回对象的原型。语法:Object.getPrototypeOf(object)参数:object,必需。引用原型的对象。返回值:object 参数的原型。原型也是对象。function person(name,age) = name; this.age = age;var person1 = new person('xiaoming',23);var proto = Obj

9、ect.getPrototypeOf(person1);/获取对象person1的原型proto.eatFruit = 'apple'console.log(person1.eatFruit);/applevar reg = /a/;var result1 = (Object.getPrototypeOf(reg) = RegEtotype);/比较正则表达式对象的原型console.log(result1 + " ");/truevar err = new Error("an error");var result2 = (O

10、bject.getPrototypeOf(err) = Etotype);/比较对象原型console.log(result2);/true6、object.hasOwnProperty()object.hasOwnProperty(proName):确定某个对象是否具有带指定名称的属性。语法:object.hasOwnProperty(proName)参数:object,必需。对象的实例。proName,必需。一个属性名称的字符串值function person(name,age) = name; this.age = age;toty

11、pe.singsong = function(songName) this.songName = songName; console.log('singsong');totype.sayHello = function() console.log('sayHello');var person1 = new person('xiaoming',23);var person2 = new person('angerbaby',22);console.log(person1.hasOwnProperty("

12、name");/true;console.log(person1.hasOwnProperty("age");/true;console.log(person1.hasOwnProperty("singsong");/false;console.log(totype.hasOwnProperty("singsong");/true;console.log(totype.hasOwnProperty("songName");/false;7、Object.getOwn

13、PropertyNames()Object.getOwnPropertyNames(object):返回对象自己的属性的名称。一个对象的自己的属性是指直接对该对象定义的属性,而不是从该对象的原型继承的属性。对象的属性包括字段(对象)和函数。语法:Object.getOwnPropertyNames(object)参数:object,必需。包含自己的属性的对象。返回值:一个数组,其中包含对象自己的属性的名称。function person(name,age,number) = name; this.age = age; this.number = number; this.t

14、oString = function() return (+","+this.age+","+this.number); var person1 = new person('xiaoming',23,'#39;);var propertyArr = Object.getOwnPropertyNames(person1);console.log(propertyArr);/"name", "age", "number", "

15、;toString"/下面的示例显示了使用 person 构造函数构造的 person1 对象中以字母“S”开头的属性名。var names = Object.getOwnPropertyNames(person1).filter(checkkey);/filter(),传参为一个函数,作用为用这个函数来过滤数组元素console.log(names);/"name", "number"function checkkey(value) var firstchar = value.substr(0,1); if(firstchar.toLower

16、Case() = 'n') return true; else return false; /下面的示例创建一个对象,该对象具有三个属性和一个方法。然后使用 keys 方法获取该对象的属性和方法。var propertyArr1 = Object.keys(person1);console.log(propertyArr1);/"name", "age", "number", "toString"理解js对象中的可枚举性(enumerable):概念:可枚举性(enumerable)用来控制所描述的

17、属性,是否将被包括在for.in循环之中。具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性。for.in循环Object.keys方法JSON.stringify方法var o = a:1, b:2;o.c = 3;Object.defineProperty(o, 'd', value: 4, enumerable: false);o.d/ 4for( var key in o ) console.log( okey ); / 1/ 2/ 3Object.keys(o) / "a", "b", &quo

18、t;c"JSON.stringify(o) / => "a:1,b:2,c:3"/上面代码中,d属性的enumerable为false,所以一般的遍历操作都无法获取该属性,使得它有点像“秘密”属性,但还是可以直接获取它的值。/至于for.in循环和Object.keys方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法8、Object.defineProperty()概念:将属性添加到对象,或修改现有属性的

19、特性。语法:Object.defineProperty(object, propertyname, descriptor)参数:obj为需要定义的属性对象;prop为需定义或修改的属性的名字;descriptor为将被定义或修改的属性的描述符。返回值:返回传入函数的对象,即第一个参数obj对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;不能同时是两者。数据描述符和存取描述符均具有以下可选键值:configurable:当且仅当该属性的 co

20、nfigurable 为 true 时,该属性才能够被改变,也能够被删除。默认为 false。enumerable:当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。数据描述符同时具有以下可选键值:value:该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。writable:当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。存取描述符同时具有以下可选键值:get:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined。set:一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。记住,这些选项不一定是自身属性,如果是继承来的也要考虑。为了确认保留这些默认值,你可能要在这之前冻结 Ototype,明确指定所

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论