`
北极的。鱼
  • 浏览: 158970 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转】用调试工具来理解JS中的prototype属性。

阅读更多

原始地址:http://qiang106.iteye.com/blog/575424

 

    首先这次我们来看看Javascript的prototype有有以下几个特性:
一、我们知道,JS类可以理解成一个构造方法,用new创建一个JS类的对象时,类构造方法会被指定一个prototype属性,这个prototyep我们把它叫做JS类的的原型,原型的初始值是一个对象,这个对象只带有一个属性名为constructor,它指回到和原型关联的那个构造方法;
二、原型的属性,在所有这个JS类的对象实例中共享;
三、当JS程序读取对象中属性时,首先读取的是对象中定义的属性,如果属性不存在,则到对象的原型中搜索,这也体现JS的继承扩展特性,如果原型中也没有这个属性当然就出错啦;
四、当在JS程序中写一个属性时,情况不会像第3点说的那样了,如果对象中没有定义这个属性不存在,那么这个在这个对象中就会添加这一个属性,即使原型中定义了这个属性,那么也只能说明添加的这个对象的属性和原型的属性同名。

现在就开始让我们来“调”出这几个特性吧,参考以下程序代码:

<script language="javascript">
	function test(){
		var T = function(){};
		var t1 = new T(),t2 = new T();
		T.prototype.attr = 1;
		var result1 = t1.attr;
		T.prototype.attr = 2;
		var result3 = t2.attr;
		t1.attr = 2;
		var result2 = (t1.attr == t2.attr);
		t2.attr = 3;
		var result4 = T.prototype.attr;
		document.writeln(result1);
		document.write("<br>" + result2);
		document.write("<br>" + result3);
		document.write("<br>" + result4);
	}	
</script>

 1、在IE8或者FireBug中定义如下断点


 

2、当程序跑到这里时,我们看变量情况如下:


 

3、T中只是一个空对对象,什么属性也没有,再按F11两次单步执行,此时完成var t1 = new T(),我们再看变量T:



 
4、此时已经多了一个prototype属性,并且这个属性包含一个constructor的属性,这个属性是一个方法,实际它就是指向了原型相关的构造方法,即T的构造方法,再观察,我们发现此时t1和t2中都没有attr属性,继续F11,下一行是指给T的原型添加一个属性,并赋值为1,当程序执行完这一行后我们发现t1和t2也多了一个属性attr,这个属性实际上是从原型那承下来的,当然值也是等于1,如下图:


5、继续按F11,T.prototype.attr = 2;这一行是改变原型的值,当过完这一行,发现变量有变化了,t1,t2的attr的值也都变成了2,这也再次证明t1,t2的attr正是继承自原型,自然result2的值也为true了,如下图:



 

6、再往下t2.attr = 3;改变了t2的attr,此时是写t2的attr,写与读不一样,它会在对象中添加一个新的属性,如下图,此时原型的attr并没有变成3,只有t2的attr为3:



 7、而t1.attr2 = 4;这一步也再次说明了在对象中添加一个新的属性,最终截图效果



 

在浏览器也输出了:

1 
true
2
2 

 

通过这样简单的几步调试,观察其中变量变化,清楚地让我认识了prototype的这几点特征,发现调试有时也不仅只是用来调试我们程序对与错,有时还能帮助我们很直观的理解程序甚至语言运行的一些特征,各位XDJM有其它更准确的理解或者更好的方法,还请不吝赐教,在此谢过。

  • 大小: 1.8 KB
  • 大小: 2.3 KB
  • 大小: 2.3 KB
  • 大小: 4.9 KB
  • 大小: 4.1 KB
  • 大小: 4.9 KB
  • 大小: 5.5 KB
分享到:
评论

相关推荐

    Prototype.js学习从简单开始

    ### Prototype.js学习从简单开始:元素定位与DOM操作 #### 引言 随着Web开发的不断进化,Ajax技术成为提升用户体验的重要工具。...此外,深入理解JavaScript语言本身,将使你在使用Prototype.js时更加得心应手。

    Linux 桌面玩家指南:19. 深入理解 JavaScript,及其开发调试工具 - 京山游侠 - 博客园1

    【深入理解JavaScript及其开发调试工具】 JavaScript是一种广泛用于网页和网络应用的编程语言,它主要负责客户端的交互逻辑,使得网页动态化、响应用户操作。本文将深入探讨JavaScript的核心概念,包括对象和原型链...

    prototype学习笔记

    至于"工具"标签,可能指出了开发者可以使用的工具和技巧,比如使用`console.log()`或第三方库如`lodash`来检查和操作`prototype`,或者使用某些IDE和代码编辑器的特性来更好地理解和调试`prototype`相关的代码。...

    JS:typeof instanceof constructor prototype区别

    在JavaScript(JS)编程语言中,确定变量或对象的类型是一项基本且重要的任务。这不仅有助于理解代码的行为,还能在调试、数据验证以及实现特定功能时提供帮助。本文将深入探讨四种常用的方法来识别和判断JavaScript...

    prototype1.7.2

    Prototype JavaScript 框架,简称 Prototype,是 JavaScript 语言中一个广泛使用的开源库,它为 Web 开发提供了一系列强大的工具,旨在简化 DOM 操作、事件处理、Ajax 交互以及对象扩展等任务。本文将详细探讨 ...

    javascript编译工具

    在JavaScript方法和样式属性的理解与应用上,这些工具提供了强大的支持。 JavaScript是一种广泛使用的动态编程语言,尤其在Web开发中扮演着核心角色。它允许我们实现页面的交互性、动态更新和数据的异步处理。...

    prototype.js

    总的来说,prototype.js 是JavaScript世界中一个里程碑式的库,它极大地推动了Web2.0的发展,并启发了许多后续的JavaScript框架和库。通过深入学习和使用prototype.js,开发者能够提升网页的互动性和用户体验,同时...

    JS Ajax XML 处理 (prototype)

    Prototype与许多其他工具(如Firebug、Chrome开发者工具)配合使用,可以帮助调试和优化Ajax请求。例如,通过查看网络面板可以检查请求头、响应头和响应数据。 总结,Prototype库提供了强大且易用的Ajax功能,让...

    prototype1.4源码解读

    总的来说,Prototype 1.4源码解读是一次深入理解JavaScript库设计和实现的好机会,它不仅可以帮助我们提高JavaScript编程技巧,还能让我们更好地理解和应用面向对象编程的思想。在阅读和研究源码的过程中,可以不断...

    JavaScript_一个现代模型图形可视化器和调试器.zip

    3. **原型继承**:JavaScript使用原型链实现对象的继承,每个对象都有一个内部属性[[Prototype]],可以通过__proto__属性或Object.getPrototypeOf方法访问。 4. **函数是第一级公民**:函数在JavaScript中可以作为值...

    Prototype 开发者手册 PDF版.zip

    Prototype是一个广泛使用的JavaScript框架,旨在扩展JavaScript语言,为Web开发提供更强大、更简洁的工具集。这份PDF手册详细阐述了如何利用Prototype提升前端开发效率,优化代码结构,并实现高效的功能复用。 在...

    json与xml格式转换JS插件ObjTree和jkl-dumper

    在使用ObjTree和jkl-dumper时,你需要将它们导入到你的JavaScript环境中,例如浏览器或Node.js服务器。然后,通过调用插件提供的函数,将JSON对象传递给它们,它们会返回相应的XML字符串。对于更复杂的转换需求,你...

    javaScript 中文开发文档

    11. **调试和优化**:了解如何使用开发者工具进行代码调试和性能优化是每个JavaScript开发者必备的技能。包括设置断点、分析调用栈、检查内存使用情况等。 12. **跨域通信**:CORS(跨源资源共享)是允许不同源的...

    prototype小例子

    本篇将深入讲解`Prototype`库中的`Ajax`模块,并通过一个小例子来展示如何使用`Prototype`进行数据库连接的模拟操作。 首先,了解`Prototype`的核心概念——`prototype`。在JavaScript中,每个函数都有一个名为`...

    这些年遇到的js的坑

    在JavaScript的世界里,开发者经常会遇到...综上所述,这篇博客可能涵盖了JavaScript基础语法、异步编程、DOM操作、工具使用、错误调试等多个方面,深入理解这些知识点可以帮助开发者避开JavaScript编程中的许多陷阱。

    Prototype.开发者手册PDF(强烈推荐)+chm帮助文档

    《Prototype开发者手册》是针对JavaScript库Prototype的一份详尽指南,旨在帮助开发者深入理解和高效使用这一强大的工具。Prototype是Web开发中的一个关键组件,尤其在AJAX应用中扮演着重要角色。它通过扩展...

    You Don't Know JS-ZH-1-3

    同时,原型是理解JavaScript继承的关键,书中会介绍原型链、`__proto__`、`prototype`属性以及如何利用这些机制实现面向对象编程。 4. **异步编程**:JavaScript是单线程的,但通过事件循环和回调函数可以实现异步...

    JavaScript书中的源码

    书中源码可能会展示如何利用原型来实现继承,以及如何通过Object.prototype和__proto__属性进行对象间的关联。此外,构造函数和实例化过程也是原型链中常见的知识点。 再者,JavaScript的异步编程是其独特之处,...

    理解JavaScript的caller callee call apply

    ### 理解JavaScript中的`caller`...综上所述,理解`caller`、`callee`、`call`、`apply`以及`arguments`对象在JavaScript编程中至关重要,它们不仅增强了函数的灵活性和复用性,还提供了深入分析和调试代码的强大工具。

Global site tag (gtag.js) - Google Analytics