javascript 里类的五种实现方式
来源:互联网 发布:ubuntu系统备份为iso 编辑:程序博客网 时间:2024/05/29 03:08
摘抄自《javascript高级程序设计》一书。
javascript 是面向对象的语言,自然也有面向对象的一些特性。
一:构造函数方式
第一步选择类名,即构造函数的名字。下面的例子在构造函数里不创造对象,而是使用this,使用new 运算符调用构造函数的时候在执行第一行代码前先创建一个对象,这个对象只能用this访问,然后可以直接赋予this属性,默认情况下是构造函数的返回值,不必return。
例子:
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
this.showColor = function()
{
alert(this.color);
};
}
var oCar1 = new Car("red",4);//output red
var oCar2 = new Car("blue",3);//output blue
上面的例子会为每个对象都创建独立的函数版本。再看下面的原型方式
二:原型方式:
该方式利用对象的prototype属性,可把它看成创建新对象所依赖的原型。下面的例子使用空构造函数设置类名,然后所有的属性和方法都直接赋予prototype属性。在调用new Car()的时候原型的所有属性都被立即赋予要创建的对象。
例子:
function Car()
{
}
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.showColor = function()
{
alert(this.color);
};
var oCar1 = new Car();//output red
上面的例子在创建多个实例后,对象的属性值并没有变。再看下面的混合的构造函数/原型方式
三:混合的构造函数/原型方式:
联合使用构造函数和原型方式,就可以像其他程序设计语言杨创建对象。使用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性。
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
}
Car.prototype.showColor = function()
{
alert(this.color);
};
var oCar1 = new Car("red",4);
var oCar2 = new Car("blue",3);
oCar1.showColor();//output red
oCar2.showColor();//output blue
四:动态原型方法:
动态原型方法的基本想法和混合的构造函数/原型方式相同,唯一的区别是赋予对象方法的位置,看下面的例子:
function Car(sColor,iDoors)
{
this.color = sColor;
this.doors = iDoors;
if(typeof Car.initialized == "undefined")//***
{
Car.prototype.showColor = function()
{
alert(this.color);
};
Car.initialized = true;//***
}
}
上面的方法使用标志initialized来判断是否已给原型赋予任何方法,该方法只创建并赋值一次。
五:混合工厂方式
这种方式的目的是创建假构造函数,只返回一种对象的新实例:
function Car()
{
var tempCar = new Object;
tempCar.color = "red";
tempCar.doors = 4;
tempCar.showColor = function()
{
alert(this.color);
};
return tempCar;
}
var oCar1 = new Car();
由于在Car()构造函数内部调用了new运算符,所以将忽略构造函数外的第2个new 运算符。不建议使用这种方式。
可以使用prototype属性为任何已有的类定义新的方法。
- javascript 里类的五种实现方式
- JavaScript实现继承的五种方式
- javascript中实现对象继承的五种方式详解
- JavaScript实现页面跳转的五种方式
- javascript里构建类的4种方式
- javaScript中定义类或对象的五种方式
- javaScript中定义类或对象的五种方式
- javaScript中定义类或对象的五种方式
- 五种加载JavaScript脚本的方式
- 五种加载JavaScript脚本的方式
- JavaScript五种继承方式
- JavaScript五种继承方式
- JavaScript五种继承方式
- Spring事务的五种实现方式
- 生产者消费者的五种实现方式
- 面向对象的JavaScript 五 ----- Javascript实现继承的方式(2)
- JavaScript客户端与服务器端的五种通信方式
- javascript里的"类"
- DDR2 Layout Guide for Memory Down
- CSS内联在JSP页面中或者CSS外联中的路径问题
- 使用 Google App Engine 实现基于云计算的小型 Java 数据服务应用
- 配置Eclipse
- C语言中字符串结束符'\0'的讨论
- javascript 里类的五种实现方式
- 如何使我设置好setuid的shell脚本运行起来呢?(译)
- const类型定义:指明变量或对象的值是不能被更新,引入目的是为了取代预编译指令
- SDH和DDN的区别(转)
- Facebook“应用经济”已制造20万就业,为美经济贡献超150亿美元
- Automatic Login
- 关于调试com组件中的一个接口
- ext 2.1 有单选按钮的表单提交
- 如何获取用户的真实IP