| 发表于:2008-01-23 08:28:18 楼主 |
javascript并不支持真实的类(像java,c#,c++),但是它可以通过构造函数和属性定义伪类. 构造函数:通过构造函数来定义一个对象类,使用它的参数来初始化this关键字所引用的对象的属性.构造函数只是初始化了特定的对象,但并不返回这个对象.通过new 调用构造函数. 原型对象和继承:javascript对象继承原型对象的所有属性.一个对象的原型是由创建并初始化该对象的构造函数定义的.javascript中的所有属性都有prototype属性,它引用了一个对象.看下面的例子. //构造函数初始化不同实例的属性 function rectangle(w, h) { this.width = w; this.height = h; } rectangle.prototype.area = function( ) { return this.width * this.height; }//原始对象保存方法并共享实例的其他属性 注意,继承是在查询一个属性值时自动发生的.每个类都有一个原型对象,这个原型对象都具有一套属性.他们可以通过for/in被列举出来并且可以用in操作符来测试.但是只能用object.hasownproperty()方法来区分,如: var r = new rectangle(2, 3); r.hasownproperty("width"); // true: width 是r的一个直接属性 r.hasownproperty("area"); // false: area是r的一个继承属性 "area" in r; //true: "area"是r的一个属性 读写继承属性:属性的继承只发生在读属性值时,而在写属性值时不会发生.下面通过一个例子说明: 不仅是用户自定义类有原型对象,内置类如string和date也有原型对象,并且可以赋值给他们.如: string.prototype.endswith = function(c) { return (c == this.charat(this.length-1)) }//如果最后一个字符是"c"将返回true var message = "hello world"; message.endswith('h') // returns false message.endswith('d') // returns true javascript中的模拟类:默认情况下,任何对象属性都是实例属性,为了真实地模拟面向对象的程序设计语言,我们说javascript中的实例属性是那些在对象中用构造函数创建的或初始化地属性.实例方法和实例属性非常相似,只不过它是方法而不是数值.实例方法是由特定对象或实例调用的.在javascript中必须用this特别指明属性. 类属性:在javascript中,number.max_value就是类属性的一个例子,因为属性max_value就是通过类number来存取的.由于每个类属性只有一个副本,所以本质上说来属性是全局变量. 类方法:一个与类关联在一起的方法,而不是和类的实例关联在一起的方法.要调用类方法,必须使用类本身,而不能使用该类的特定实例.如date.parse()就是一个类方法. 通用对象方法:tostring(),valueof(),compareto() 超类和子类:object是所有内部类的超类,本章中使用的类都是object的直接子类. 无继承扩展: |
|
|
|
|