WEB开发网
开发学院网页设计JavaScript JavaScript对象模型 阅读

JavaScript对象模型

 2010-09-14 13:20:17 来源:WEB开发网   
核心提示: 具体实现上,上图中横向之间可能也存在关联,JavaScript对象模型(3),例如对于build-in data structure和constructor,Function、 Date、 Array、 RegExp等都可以继承Object的结构而实现,名字为__proto__因为Mozi

具体实现上,上图中横向之间可能也存在关联,例如对于build-in data structure和constructor,Function、 Date、 Array、 RegExp等都可以继承Object的结构而实现,但这是具体实现相关的事情了。

关于简单数值类型的对象化

这是一个细微的地方,下面描述对于Boolean, String和Number这三种简单数值类型都适用,以Number为例说明。

JS规范要求: 使用var num1=123;这样的代码,直接返回基本数据类型,就是说返回的对象不是派生自Number和Object类型,用num1 instanceof Object测试为false;使用new关键字创建则返回Number类型,例如var num2=new Number(123); num2 instanceof Number为true。

将Number当作函数调用,返回结果会转换成简单数值类型。下面是测试代码:

//Passed in FF2.0,IE7,Opera9.25,Safari3.0.4
varnum1=newNumber(123);//num1derivedfromNumber&Object
num1instanceofNumber//result:true
num1instanceofObject//result:true
//convertthenum1fromNumber type toprimitivetype, so it's no longer an instance of Number or Object
num1=Number(num1);
num1instanceofNumber//result:false
num1instanceofObject//result:false
varnum2=123;//num2isaprimitivetype
num2instanceofNumber//result:false
num2instanceofObject//result:false

虽然我们得到了一个简单数值类型,但它看起来仍然是一个JS Object对象,具有Object以及相应类型的所有属性和方法,使用上基本没有差别,唯一不同之处是instanceof的测试结果。

Prototype继承

Prototype

每个对象都有一个[[Prototype]]的内部属性,它的值为null或者另外一个对象。函数对象都有一个显示的prototype属性,它并不是内部[[Prototype]]属性。不同的JS引擎实现者可以将内部[[Prototype]]属性命名为任何名字,并且设置它的可见性,只在JS引擎内部使用。虽然无法在JS代码中访问到内部[[Prototype]](FireFox中可以,名字为__proto__因为Mozilla将它公开了),但可以使用对象的isPrototypeOf()方法进行测试,注意这个方法会在整个Prototype链上进行判断。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:JavaScript 对象 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接