网络编程
位置:首页>> 网络编程>> JavaScript>> javascript对象概念大全(2)

javascript对象概念大全(2)

 来源:eroading.com 发布时间:2009-05-22 18:24:00 

标签:对象,JavaScript,类,继承

6.构造函数

构造函数是具有两个特性的javascript函数:
(1)它由new 运算符调用;
(2)传递给它的是一个对新创建的空对象的应用,将该引用作为关键字this的值,而且它还要对新创建的对象进行适当的初始化。
记住:构造函数只是初始化对象,并不返回新创建的对象。

function Rectangle(w, h){
this.width = w;
this.height = h;
}
var ret1 = new Rectangle(2, 1);
//注意构造函数是如何使用它的参数来初始化this关键字所引用的对象的属性

7.对象的方法

所谓方法,就是通过对象调用的javascript函数。我们知道,函数就是数值,它们所使用的名字没有任何特殊之处,可以将函数赋给任何变量,甚至赋给一个对象的任何属性,那么这个属性就是对象的方法了。
在对象的方法体内,关键字this的值就成了调用该方法的对象。

function print(){}
ret1.print = print;

 8.关于this的讨论

任何一个用作方法的函数都会得到一个额外的实际参数,即调用该函数的对象。由于方法通常是对那个对象执行某种操作,所以要表达函数作用于对象这一事实,最好采用方法的调用语法。
如rect.setSize(width, height);
setSize(rect, width, height);

虽然这两行代码对对象rect执行相同的操作,但是第一行代码在表达对象rect是操作的焦点(或者说操作的目标)这一观点时显然清楚得多。

虽然有区别地对待函数和方法比较有用,但实际上它们之间的差别并不大。回忆一下,函数是存储在变量中的值,而那个变量也不过是全局对象的一个属性。因此,当你调用一个函数时,实际上调用的是全局对象的一个方法。

在这样的函数中,关键字this引用的是全局对象。所以函数和方法之间在技术上没有差别,真正的差别在于设计和目的上,方法是用来对this对象进行操作的,而函数通常会是独立的,并不需要使用this对象。

(function f(){
var values = “”;
for(var v in this)values += v + ” “;
window.alert(values);
})(); //返回window对象的所有属性和方法名称

9.原型对象和继承

javascript每个对象都有原型对象,每个对象都继承原型对象的所有属性。
一个对象的原型是由创建并初始化该对象的构造函数定义的。javascript中的所有函数都有prototype属性,它引用了一个对象。虽然原型对象初始化时是空的,
但是你在其中定义的任何属性都会被该构造函数创建的所有对象继承。

构造函数定义了对象的类,并初始化了类中状态变量的属性,如width和height。因为原型对象和构造函数关联在一起,所以类的每个成员都从原型对象继承了相同的属性。
这说明原型对象是存放方法和其他常量属性的理想场所。

注意,继承是在查询一个属性值时自动发生的。属性并非从原型对象复制到新的对象的,它们只不过看起来像是那些对象的属性。这其中有两点重要的含义。

一是使用原型对象可以大量减少每个对象对内存的需求量,因为对象可以继承许多属性。二是即使属性在对象被创建之后才添加到它的原型对象中,对象也能够继承这些属性。

每个类都有一个原型对象,这个原型对象都具有一套属性。但是实际上却有大量的类实例,每个实例都能继承原型对象的属性。由于一个原型对象能够被多个对象继承,所以javascript必须强化读写属性值之间的不对称性。在读对象o的属性p时,javas会首先检查o是否具有一个名为p的属性。如果o没有这个属性,javascript就会再检查o的原型对象是否具有这个属性。这样才使得以原型为基础的继承机制起作用。

但是当写一个属性的值时,javascript并不会检查原型对象中是否有这个属性的值。因为,如果允许改变原型对象的这一属性,那就改变了整个对象类的p值,包括其他new出来的对象变量的属性值。

因此,属性的继承只发生在读属性值时,而不会发生在写属性值时。如果你设置的对象o的属性p是对象o从它的原型对象继承而来的,那么结果就是你直接在对象o中创建了一个新属性p。现在o已经有了一个自己的名为p的属性,它就不会再从它的原型对象继承p的值了。当你读p的值时,java首先查询o的属性。

由于它发现了o中定义的p,就不必再查询原型对象,也就不会再发现原型对象中定义的p值了。我们称之为o中的p”遮蔽”了或者说”隐藏”了原型对象中的属性p。

因为原型对象的属性被一个类的所有对象共享,所以通常只用它们来定义类中所有对象的相同的属性。这使得原型对象适用于方法定义和常量的定义。

0
投稿

猜你喜欢

  • 我一直是使用mysql这个数据库软件,它工作比较稳定,效率也很高。在遇到严重性能问题时,一般都有这么几种可能:1、索引没有建好;2、sql写
  • 现代浏览器可以基于RFC 2397标准使用base64把图片进行编码,然后输出类似data:image/png;base64,iVBORw0
  • Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼、富有朝气。但也许你还没有发现并应用它的一些更高级的功能吧
  • 阅读上一篇教程:WEB2.0网页制作标准教程(7)CSS学习入门 CSS布局与传统表格(table)布局最大的区别在于:原来的定位都是采用表
  • 例如:我们在百度中搜索 词典网,则网址后面的参数就是http://www.baidu.com/s?cl=3&wd=%B4%CA%B5
  • 和YSlow一样,“Page Speed”也是一个基于firebug附加组件的FireFox插件。虽然听起来有点拗口,但是意思很容易理解:如
  • 打开在节点中加入一句:max_allowed_packet=5M   将MySQL的容量扩大到5M  
  • 本来想等到IE8正式发布时再在blog中写段代码,用来提示IE6用户升级到IE8的,不过貌似IE 8已经RTM了,今天又正好看到这个“升级I
  • asp分页,是学习使用asp编程经常遇到的问题,也算是一个经典的问题。本文介绍了一个asp分页源代码例子,希望对初学者有所帮助,本程序文件名
  • 原来字母还可以组合成各种动物图案,真是佩服设计师的奇思妙想,很可爱,超级有趣的组合!Bembo's Zoo 猴子:羊是牛吗,勤劳的水
  • 1、开始->运行,输入SERVICES.MSC到服务里,停止所有Oracle服务; 2、开始->程序->Oracle - OraHome81
  • 异步 innerHTMLinnerHTML 插入节点的性能的问题,通常是我们最关注的。在回答这问题时,James Padolsey 给出了他
  • 我开发过几个采集程序,也研究过很多采集程序代码,所以对采集程序的原理还算是稍微有些了解。先说一下采集原理:采集程序的主要步骤如下: 一、获取
  • 本文阐述了网页设计中的十大诀窍,作为网页开发者我们应该注意,这样才能最大限度得发挥网站的功能和效益: 预早筹划设计主页未必很艰难。
  • 设计首页的第一步是设计版面布局。就象传统的报刊杂志编辑一样,我们将网页看作一张报纸,一本杂志来进行排版布局。虽然 * 页技术的发展使得我们开
  • 序言本文所提及的VTD-XML并非本文作者原创,作者只是对它进行介绍。问题通常当我们提起XML的使用时,最头痛的部分便是XML的verbos
  •  <script language="javascript"> functio
  • class test        {  &nbs
  • 一、Position1、语法:position:static/ absolute / fixed / relative2、参数:(1)sta
  • 如何显示数据库的结构?<html><head><meta http-equiv="Cont
手机版 网络编程 asp之家 www.aspxhome.com