1.Objuect 类型 Object 类型是所有对象的基类型,可以用 new 运算符产生一个 Object 类型。 开发者可以通过产生 Object 类型的实例并向其动态添加属性和方法来产生自己需要的 对象。如: var o = new Object (); ECMAScript 要求仅当构造函数需要参数时才需要括号,如果没有参数,括号可以省 略(不推荐这种做法)。如: var o = new Object ; //legal, but not recommended 每一个 Object 类型的实例都有如下的属性和方法: constructor -- 产生对象所使用的函数。 hasOwnProperty ( propertyName )-- 表明给定的属性是否存在于对象的实例而非原 型上,propertyName 必须是一个字符串或字符串类型的变量。 isPrototypeOf ( object )-- 检查对象是否是参数对象实例的原型。 propertyIsEnumerable ( propertyName )-- 表明参数所给定的属性是否可以在 for - in 语句中进行枚举。参数必须是一个字符串或字符串变量。 toLocaleString ()-- 返回一个本地化了的对象的字符串表示。 toString ()-- 返回对象的字符串表示。 valueOf ()-- 返回一个与对象相对应的字符串、数值或布尔值。通常与 toString () 返回的结果是相同的。 因为在 ECMAScript 中,Object 是所有对象的基类型,所以,每一个对象都拥有这些 基本的属性和方法。但是,像 BOM BOM 这些浏览器对象和文档对象,他们的实现与宿 主环境有关,不受 ECMA - 262 的制约,他们不一定是直接从 Object 所继承而来。 2.原型(prototype) 每当一个函数产生时,它的 prototype 属性也将根据某些特定的规则产生。默认情况 下,所有的 prototype 自动地获得一个名称为 constructor 的属性,该属性指向以该原 型作为属性的函数。可以用 isPrototypeOf () 方法来判断一个对象(类)是否为某个对 象实例的原型。如: alert ( Person . prototype . isPrototypeOf ( person1 )); alert ( Person . prototype . isPrototypeOf ( person2 )); ECMAScript 5 增加了一个叫做 Object . getPrototypeOf () 的方法,该方法存在于 Object 类型上,可以认为是一个静态方法。该方法用于获得一个对象实例的原型。支 持该方法的浏览器有 IE 9 +, Firefox 3.5 +, Safari 5 +, Opera 12 +, and Chrome。 其用法如: alert ( Object . getPrototypeOf ( person1 ) == Person . prototype ); alert ( Object . getPrototypeOf ( person1 ). name ); 3.实例属性与原型属性 当一个属性被添加到对象的实例上后,该属性会屏蔽在原型上与之同名的任何属性 (但可以通过实例的 prototype 访问原型上的属性)。对于实例上属性的改变不会影 响到原型上相同名称的属性。 delete 运算符可以删除实例上的属性,使得原型上相应的属性可以被直接访问。 hasOwnProperty () 方法可以判定一个属性是存在于对象的实例上还是原型上。该 方法继承自 Object。仅当属性存在于对象实例上时该方法返回 true,否则,返回 false。如: alert ( person1 . hasOwnProperty ( "name" )); 4.原型和 in 运算符 in 运算符有两种使用方法:单独使用或在 for - in 循环语句中使用。单独使用 时,如果对象指定名称的属性可以访问,结果就是 true。这意味着,该属性可能存在 于实例上,也可能是存在于原型上。结合 hasOwnProperty () 方法与 in 运算符可以 判定对象的属性是否仅存在于原型上,如: function onlyHasPrototypeProperty ( object , name ){ return ! object . hasOwnProperty ( name ) && ( name in object ); } 当在 for - in 语句中使用 in 运算符时,对象所有可访问可枚举的属性都将被 返回,包括实例属性和原型属性。屏蔽原型上不可枚举的实例属性也将被返回,因为 开发者定义的属性都是可枚举的。但在 IE8 - 上却是例外。如: var o = { toString : function () { return "My Object" ; } }; for ( var prop in o ) { if ( prop == “toString” ) { alert ( "Found toString" ); //won’t display in Internet Explorer } } 这使得在 IE8 - 上,所有 Object 上的属性和方法都不可以被枚举。 5.对象属性的枚举 ECMAScript 5 提供一个 Object . keys () 方法用于检索对象上所有可枚举的实例 属性。它接受一个对象作为参数,并返回一个字符串数组,包含所有检索到的属性的 名称。如: function Person () { } Person . prototype . name = "Nicholas" ; Person . prototype . age = 29 ; Person . prototype . job = "Software Engineer" ; Person . prototype . sayName = function () { alert ( this . name ); }; var keys = Object . keys ( Person . prototype ); alert ( keys ); //”name,age,job,sayName” var p1 = new Person (); p1 . name = "Rob" ; p1 . age = 31 ; var p1keys = Object . keys ( p1 ); alert ( p1keys ); //”name,age” getOwnPropertyNames () 方法用于检索对象所有可枚举和不可枚举的实例属性。 var keys = Object . getOwnPropertyNames ( Person . prototype ); alert ( keys ); //"constructor,name,age,job,sayName" var keys = Object . getOwnPropertyNames ( p1 ); alert ( keys ); //"name,age" for ( var prop in p1 ) { alert ( prop ); //依次输出:name,age,job,sayName } 支持 Object . keys () Object . getOwnPropertyNames () 方法的浏览器有 IE9 +, Firefox 4 +, Safari 5 +, Opera 12 +, Chrome。

更多相关文章

  1. 关于如何更好的监听元素属性的变化(转)
  2. Dojo:不能在AccordionContainer.js中读取未定义的属性“h”。
  3. ng- repeat显示的行等于no属性,甚至不显示html视图上的数据
  4. 如何将对象作为参数传播给函数?
  5. RangeError:在Node.js中调试/记录/检查对象时超过了最大调用堆栈
  6. 是否有一个简单的库将JSON对象渲染为树?
  7. .addEventListener不是null [duplicate]的属性
  8. 在JavaScript中进行文件处理,第四部分:对象URLs
  9. 我在显示随机选择的对象时遇到问题

随机推荐

  1. ASP.Net Core中关于WebApi几种版本控制对
  2. 详解.Net Core使用Socket与树莓派进行通
  3. C#实现表格隔行换色
  4. .NET Core中遇到的一些坑的图文详解
  5. .net core使用Redis发布订阅方法介绍
  6. C#中关于List<T>的并集与交集以及差集解
  7. C#中发送邮件的实现方法详解
  8. C# 数组作为参数传递出现的问题解决
  9. C#中引用类型之特例string的详细介绍
  10. C#实现Json序列化删除null值的方法实例