JavaScript权威指南之学习笔记(第六版)(7)

2019-01-07 18:26

一个对象的原型就是它的构造函数的prototype属性的值。所有的函数

都有一个prototype属性,当这个函数被定义的时候,prototype属性自动创建和初始化。Prototype属性的初始化是一个对象,这个对象中带有一个属性。这个属性名为constructor,它指回到和原型相关联的那个构造函数。添加给这个原型对象的任何属性,都会成为被构造函数所初始化的对象的属性。

原型对象是放置方法和其他不变属性的理想地方。

注意,继承作为查找一个属性值的过程的一部分。属性并非从原型对象

那里复制到新对象,它们只是像那些对象的属性一样地出现。首先,使用原型对象可以显著地减少每个对象的内存数量。其次,即便是在对象创建以后才添加到原型中的属性,对象也可以继承它。

9.2.1读取和写入继承的属性

当读取对象o的属性p的时候,JS首先检查o是否有一个名为p

的对象。如果没有,它接下来检查o的原型对象是否有一个p的属性。

当写入一个对象的属性值的时候,JS不会使用原型对象。

9.3JS中模拟类

9.3.1实例属性

每个对象都拥有它的实例属性的一份单独拷贝。默认情况下,JS中

的任何对象属性都是一个实例属性,这里我们特指由构造函数创建和初始化的属性。

9.3.2实例方法

在JS中,通过构造函数的原型对象中的一个属性设置为一个函数

值,从而定义了一个实例方法。每个实例方法由一个类的所有实例方法共享。

9.3.3类属性

也就是为构造函数定义属性,跟普通的函数一样的。 Test.Unique=2;

9.3.4类方法

也就是为让相应函数成为构造函数的一个属性而已。 Test.f=function() {}

9.3.7私有成员

JS中没有私有成员。一般把属性设置为以下划线开头的属性。 来自JS高级程序设计:定义类的常用两种方法

1.混合构造函数/原型方式

Function Car(scolor,sdoors){ }

This.color=scolor; This.door=sdoors;

Car.prototype.showColor=function (){ alert(this.color);}; 2.动态原型方法

Function Car(scolor,sdoors){

This.color=scolor; This.door=sdoors;

If( typeof Car._initialized==”undefined”)

{

Car.prototype.showColor=function(){ale

rt(this.color);};

}

Car._initialized=true;

9.4通用对象模型

9.4.1toString方法

当定义一个类时,就为它定义一个toString()方法。

9.4.2valueOf方法

如果一个类需要把对象转换为某种基本类型,一般是转换为数字。

那么可以为这个类定义此方法。

注意,在某些条件下,在把一个对象转换为一个字符串的时候,val

ueof方法可以比toString()方法更优先使用。因此如果要把类强制转换为一个字符串时,可能需要更加显式调用toString()方法。

9.4.3比较方法

要比较对象时最好自定义一个方法。因为等同运算符和相等运算符

比较的是对象的引用,而关系运算符会把对象转换为数字或字符串。

9.5超类和子类

例:function Rectangle(w,h){this.width=w;this.height=h;}

Rectangle.prototype.area=function(){return this.width*this.

height;}

Function DerivedRectangle(x,y,w,h) {

Rectangle.call(this,w,h);//this就是子类的一个实例对象,

那么超类Rectangle成了这个实例对象的一个属性方法来调用,那么这个方法里的this就变成了当前的实例对象,显然里面的属性也成了这个实例对象的属性!!

}

DerivedRectangle.prototype=new Rectangle(); Delete DerivedRectangle.prototype.width; Delete DerivedRectangle.prototype.height;

DerivedRectangle.prototype.constructor=DerivedRectaThis.x=x; This.y=y;

ngle;

DerivedRectangle.prototype.contains=function(){retur

n this.x+this.y+this.width+this.height; }

首先超类构造函数作为新创建的对象的一个方法调用的。必须显示地把

这个原型对象创建为超类的一个实例,然后显示地设置原型对象的constructo

r属性。另外,可以删除超类构造函数在原型对象中创建的所有属性,因为我们要的原型对象从它的原型那里继承的那些属性。

9.5.1构造函数链

如果只有一层子类,可以为子类原型对象添加一个superclass属性 DerivedRectangle.prototype.superclass=Rectangle; Function DerivedRectangle(x,y,w,h) {

This.superclass(w,h); This.x=x;this.y=y;

}

9.5.2调用被覆盖的方法

任何时候,当为一个类定义toString方法时,就会覆盖object的

例:

toString()方法。

DerivedRectangler.prototype.toString=function(){ }

Return “(“+this.x+”,”+this.y+”)”+

Rectangle.Prototype.toString.apply(this);

超类的toString的实现是用超类的原型对象的一个属性。无注调用

该方法。使用apply或call方法。 十、正则表达式


JavaScript权威指南之学习笔记(第六版)(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-3-2监理例会纪要

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: