2007-05-16

javascript对象的property和prototype关系

来源: 本站收集整理 作者:佚名 评论 0 条
 

objectRef这个对象的有一个属性叫做testString,那么这句代码会把testString的值赋给val

代码
var val = objectRef.testNumber;

在objectRef这个对象里并没有testNumber这个属性,但是val却的到了值8,而不是undefine,这是因为解释器在没有在当前对象找到要找
的属性后,就会去检查这个对象的prototype,objectRef的prototype是MyObject1对象,这个对象有testNumber这个属性,所以val得到8这个值。

代码
var val = objectRef.toString;

现在val是个function的引用,这个function是Object.prototype的property,由于MyObject1和MyObject2都没有定义toString这个property
所以Object.prototype返回。

代码
var val = objectRef.madeUpProperty;

最后val是undefined,因为MyObject1和MyObject2,还有Object都没有定义madeUpProperty这个property,所以得到的是undefine.

读操作会读取在obj自己和prototype 链上发现的第一个同名属性值
写操作会为obj对象本身创建一个同名属性(假如这个属性名不存在
这就意味着objectRef.testNumber = 3会在objectRef对象上创建一个property,名字是testNumber,当下一次在要读取testNumber时
propertype链就不会工作,仅仅会得到objectRef的property 3,而MyObject1的testNumber属性并不会被修改。下面的代码可以验证


代码
/* 构建MyObject1这个类型的构造函数
MyObject1 - type.
*/
function MyObject1(formalParameter){
/* 为者对象创建一个属性名字叫testNumber
*/
this.testNumber = formalParameter;
}

/* 构建MyObject2这个类型的构造函数
MyObject2 - type:-
*/
function MyObject2(formalParameter){
/* 为者对象创建一个属性名字叫testString*/
this.testString = formalParameter;
}

/* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/
var obj1 = new MyObject1( 8 );
MyObject2.prototype = obj1;

/* 最后我们创建MyObject2类型的一个对象*/

var objectRef = new MyObject2( "String_Value" );

alert(objectRef.testNumber);
objectRef.testNumber = 5;
alert(objectRef.testNumber);
alert(obj1.testNumber);


共2页: 上一页 [1] 2 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:学习网页制作知识之构成网页内容的段落  
下一篇:HTML网页设计中关于字体设计的详细讲解
    评论加载中…

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号