- 浏览: 868606 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
ECMAScript可以识别两种类型的对象,一种叫做Native Object属于语言范畴;一种叫做Host Object,由运行环境提供例如document对象,
Dom Node等
Native objects是一种松散的结构并且可以动态的增加属性(property),所有的属性都有一个名字和一个值,这个值可以是另一个对象的引用
或者是内建的数据类型(String, Number, Boolean, Null 或者 Undefined)
下面的这个简单的例子描述了一个javascript对象是如何设置一个属性的值和如何读取属性的值的。
赋值操作
一个对象的属性的创建非常简单,直接通过赋值操作就可以完成属性的创建。
var objectRef = new Object(); //create a generic javascript object.
一个名为testNumber的属性可以这样创建。
objectRef.testNumber = 5; /* - or:- */ objectRef["testNumber"] = 5;
如果复制的属性名称已经存在那么不会再次创建这个属性,赋值操作仅仅是重新设置属性的值
objectRef.testNumber = 8; /* - or:- */ objectRef["testNumber"] = 8;
js对象的原型(prototype)自己本身也可以是对象,也可以有属性(property),对于js对象的(prototype)的赋值操作跟普通对象属性的创建
没什么不同。
取值操作
在取值操作中property和prototype就不一样了,先看最简单的property取值操作。
- /*为一个对象的属性赋值,如果这个对象没有这个属性,那么在赋值操作后,这个对象就有这个属性了 */
- objectRef.testNumber = 8;
- /* 读出这个属性的值 */
- var val = objectRef.testNumber;
- /* 现在val 就得到了刚才赋予objectRef的值8了*/
/*为一个对象的属性赋值,如果这个对象没有这个属性,那么在赋值操作后,这个对象就有这个属性了 */ objectRef.testNumber = 8; /* 读出这个属性的值 */ var val = objectRef.testNumber; /* 现在val 就得到了刚才赋予objectRef的值8了*/
prototype揭密
[color=blue]
但是所有的对象都可以有prototypes, prototypes自己也是对象,那么他也可以有prototypes,这样循环下去就形成了一个prototype链,
这个链当他遇到链中队形的prototype是null时中止。(Object的默认的prototype是null)
var objectRef = new Object(); //create a generic javascript object.
创建一个新的js对象,这时这个对象的prototype是Null,所以objectRef的prototype链只包含一个对象Object.prototype
我们在看下面的代码
- /* 构建MyObject1这个类型的构造函数
- MyObject1 - type.
- */
- function MyObject1(formalParameter){
- /* 为者对象创建一个属性名字叫testNumber
- */
- this.testNumber = formalParameter;
- }
- /* 构建MyObject2这个类型的构造函数
- MyObject2 - type:-
- */
- function MyObject2(formalParameter){
- /* 为者对象创建一个属性名字叫testString*/
- this.testString = formalParameter;
- }
- /* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/
- MyObject2.prototype = new MyObject1( 8 );
- /* 最后我们创建MyObject2类型的一个对象*/
- var objectRef = new MyObject2( "String_Value" );
/* 构建MyObject1这个类型的构造函数 MyObject1 - type. */ function MyObject1(formalParameter){ /* 为者对象创建一个属性名字叫testNumber */ this.testNumber = formalParameter; } /* 构建MyObject2这个类型的构造函数 MyObject2 - type:- */ function MyObject2(formalParameter){ /* 为者对象创建一个属性名字叫testString*/ this.testString = formalParameter; } /* 下一步的操作会用MyObject1对象替换掉MyObject2默认的prototype属性*/ MyObject2.prototype = new MyObject1( 8 ); /* 最后我们创建MyObject2类型的一个对象*/ var objectRef = new MyObject2( "String_Value" );
objectRef这个MyObject2类型的对象有一个prototype的链,链中的第一个对象是MyObject1对象,MyObject1对象也有prototype,
这个prototype是Object默认的prototype,Object.prototype的prototype是null,至此这条prototype链结束。
当一个取值操作发生时,objectRef 的整个prototype链就开始工作
var val = objectRef.testString;
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);
/* 构建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);
发表评论
文章已被作者锁定,不允许评论。
-
HTML特殊字符显示
2011-08-16 21:45 978有些字符在HTML里有特别的含义,比如小于号<就表示HT ... -
html标签a的target属性的用法
2011-08-02 00:40 10501:如果使用标签<a>来链接到一个页面的话,tar ... -
JavaScript中的函数:函数的apply、call方法和length属性
2011-06-03 13:39 790转:http://www.smallrain.net/stud ... -
JS arguments 属性
2011-06-03 13:38 860arguments 属性 为当前执行的 function 对象 ... -
JS数组方法汇总
2011-03-31 12:18 1016js数组元素的添加和删除一直比较迷惑,抽个时间总结如下:var ... -
选择,分组和引用
2011-03-17 12:59 791正则表达式的语法还包 ... -
javascript 中定义private 方法
2011-03-15 09:49 928出处:http://aoqi1883.blog.163.com ... -
event.returnValue和return false的区别
2011-03-15 09:48 1207<!DOCTYPE html PUBLIC " ... -
JavaScript--execCommand指令集
2011-03-15 09:23 929<HTML> <HEAD> ... -
个性博客-七款超靓天气预报免费代码
2011-03-15 09:12 997第一种: <iframe src="http: ... -
js判断对象是否是某一类型
2011-03-15 09:05 925<!DOCTYPE html PUBLIC " ... -
常用的DOCUMENT.EXECCOMMAND
2011-03-15 09:04 1016<input type=button value=剪切 ... -
解决IE6中 Div层挡不住Select组件
2011-03-14 09:39 1081/** * 通过使用Ifram,解 ... -
配置文件(fckconfig.js)中主要配置项目如下
2011-02-18 10:59 860FCKConfig.CustomConfigurationsP ... -
[转]疯狂的跨域技术
2011-01-30 15:36 1057JavaScript是一种在Web开发中经常使用的前端动态脚本 ... -
JAVASCRIPT中RegExp.$1是什么意思
2011-01-28 15:02 2141RegExp 是javascript中的一个内置对象。为正则表 ... -
js监听WEB页面关闭事件
2010-12-31 10:54 6337javascript捕获窗口关闭事件有两种方法 onbefor ... -
天气数据调用代码,总结了一下收藏
2010-12-14 12:41 1074转载于:http://blog.csdn.net/ ... -
自动跳转
2010-12-13 15:43 908<meta http-equiv="refre ... -
JavaScript面向对象编程
2010-12-07 23:27 866创建自己的对象 要创 ...
相关推荐
比较详细的javascript对象的property和prototype是什么一种关系.docx
一种叫做Host Object,由运行环境提供例如document对象, Dom Node等 Native objects是一种松散的结构并且可以动态的增加属性(property),所有的属性都有一个名字和一个值,这个值可以是另一个对象的引用 或者...
在 JavaScript 中,对象是语言的基本组成部分,对象可以拥有属性(Property)和原型(Prototype)。理解对象的 Property 和 Prototype 关系是 JavaScript 编程的基础。 Property 在 JavaScript 中,对象的 ...
JavaScript中的继承是通过原型链(prototype chain)来完成的:每个对象内部都有另外一个对象作为其prototype而存在,对象从这个prototype中继承属性(property)。对于每个对象来说,可以用以下三种方式来访问其原型...
本文实例为大家介绍了javascript实现继承的6种方式,分享给大家供大家参考,具体内容如下 1、【原型链继承】实现的本质是重写原型对象,代之以一个新类型的实例。实际上不是SubType的原型的constructor属性被重写了...
一种JavaScript的设计模式 //简单的类的设计模式 //定义一个类class1 function class1() { //构造函数 } //通过指定prototype对象来实现类的成员定义 class1.prototype = { someProperty:”simple”, ...
Object类是所有JavaScript类的基类(父类),提供了一种创建自定义对象的简单方式,不再需要程序员定义构造函数。 二、Object类主要属性 1.constructor:对象的构造函数。 2.prototype:获得类的prototype...
首先得要明白什么是原型链,在一篇文章看懂proto和prototype的关系及区别中讲得非常详细 原型链继承基本思想就是让一个原型对象指向另一个类型的实例 function SuperType() { this.property = true } SuperType....
jQuery.sub() jQuery 1.5提供了一种创建和修改jQuery副本的方式。可以用来添加不向外部公开的方法,或者对jQuery的某些方法进行重新定义以提供新功能,或者提供更好的封装、避免名称空间冲突。当然,也可以用来开发...
在这个例子中,它实施了一种规约,那就是开始的引号必须和结束的引号相匹配.注意,如果反斜杠后跟随的数字比 代括号的子表达式数多,那么它就会被解析为一个十进制的转义序列,而不是一个引用.你可以坚持使用完整的三个...
这是最简粗暴的一种方式,基本没法用于具体的项目中。一个简单的demo如下: function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = function(){ return this.property; } function...
javascript 中的继承实例详解 阅读目录 原型链继承 ...原型链继承实现的本质是重写原型对象,代之以一个新类型的实例。代码如下: function SuperType() { this.property = true; } SuperType.prototype.
.NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN文章 —— 泛型FAQ:最佳实践 Visual C# 3.0 新特性概览 C# 2.0会给我们带来什么 泛型技巧系列:如何提供类型参数之间的转换 C#2.0 - Object Pool 简单实现 ...
ACORN-Js ACORNJavaScript实现,第k个阶加法同余随机数(ACORN)生成器。 有关更多详细信息,请参见 ...ACORN.prototype.setProperty = function(precision_multiplier, order, auto_correct_seed) 修改精度,顺序和选