JavaScript对象模型
2010-09-14 13:20:17 来源:WEB开发网具体实现上,上图中横向之间可能也存在关联,例如对于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链上进行判断。
Tags:JavaScript 对象 模型
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接