(转)Javascript-类的基本定义方式

经典模式

直接生成对象实例,并操作实例

//定义

var aCar = new Object();

aCar.color = "red";

aCar.doors = 4;

aCar.showColor = function() {}

//调用

aCar.showColor();

工厂模式

其实就把上面的代码用过函数封装一下

//定义

function createCar(color,doors){

var aCar = new Object();

aCar.color = color;

aCar.doors = doors;

aCar.showColor = function() {

alert(this.color);};

return aCar;

}

//调用

bCar = createCar(‘red‘,4);

bCar.showColor();

混合工厂模式

函数名直接用类名,然后用了关键字new,其实这样写仅仅是好看一些,和上面的工厂方法没有本质区别。

//定义

function car(color,doors){

var aCar = new Object();

aCar.color = color;

aCar.doors = doors;

aCar.showColor = function() {

alert(this.color);};

return aCar;

}

//调用

bCar = new car(‘red‘,4);

bCar.showColor();

构造模式(常用方式)

//定义

function car(color,doors){

this.color = color;

this.doors = doors;

this.showColor = function() {alert(this.color);};

}

//调用

bCar = new car(‘red‘,4);

bCar.showColor();

和上面相比,少了2句:var aCar = new Object() 和 return aCar 。实际上关键字 new 默认执行了一个操作:this = new Object() ,而this会作为构造函数的默认返回值。

原型模式

//定义

function car(){}

car.prototype.color = ‘red‘;

car.prototype.doors = 4;

car.prototype.showColor = function() {alert(this.color);};

//调用

bCar = new car();

bCar.showColor();

动态原型模式

定义并判断类的静态属性_initialized,在构造函数内部动态定义修改类原型。

//定义

function car(color,doors) {

this.color = color;

this.doors = doors;

if (typeof car._initialized == "undefined") {

car.prototype.showColor = function() {  alert(this.color);  };

}

car._initialized = true;

}

//调用

aCar = new car(‘red‘,4);

aCar.showColor();

总结:

这些是JavaScript类定义的几种基本模式,实际每种模式下定义出的属性和类都是有区别的,经典模式和工厂模式因为不符合OOP的语法习惯,基本没有人用了。我们通常使用构造模式和原型模式的混合定义类

目前最流行的也是最实用的类定义结构如下:

//用构造模式定义类的构造器和属性

function car(color,doors){

//用构造模式定义属性

this.color = color;

this.doors = doors;  }

//用原型模式定义方法

car.prototype.showColor = function(){  alert(this.color);  };

//这是静态属性

car.type = ‘vehicle‘;

aCar = new car(‘red‘,4);

aCar.showColor();

1.使用构造模式定义类的构造函数和非函数属性

2.使用原型模式定义类的函数属性(方法)

3.可以通过ClassName.name的方式定义静态属性

4.函数(方法)在本质上也是一种属性,有关各种属性定义方式的区别可以参看后面的参考章节。

(转)Javascript-类的基本定义方式

时间: 2024-11-15 21:34:09

(转)Javascript-类的基本定义方式的相关文章

javascript类的简单定义

在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript语言不支持"类",但是可以用一些变通的方法,模拟出"类". 一.构造函数法 这是经典方法,也是教科书必教的方法.它用构造函数模拟"类",在其内部用this关键字指代实例对象. function Cat() { this.name = "大毛"; } 生成实例的时候,使用ne

JavaScript 类的定义和引用 JavaScript高级培训 自定义对象

在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascript中,已经存在一些标准的类,例如Date.Array.RegExp.String.Math.Number等等,这为我们编程提供了许多方

javascript类定义小结

网上可以找到各种各样的javascript定义类的方法: 1.ECMAScript 定义类或对象 2.Javascript定义类(class)的三种方法 我想整理出一个“简洁”的类定义模板,实现代码的模块化. 一.命名空间 //根命名空间 var Root; if(!Root) Root={}; ... //二级命名空间 if(!Root.SecondNS) Root.SecondNS={}; 诸如此类. 二.类定义 通过定义类,实现代码的模块化    <script> //#region 类

字符串类的定义和字符串类对象的创建方式

String为字符串类. 其定义如下: public final class String 可以看出,String类是final类型的,是不可继承的.从源代码还可以看出,String从本质上说就是一个char类型的数组. 字符串类对象的声明有两种方式. 第一种,使用new关键字创建. String 变量名=new String("值"); 第二种,直接声明并初始化. String 变量名="值"; 我更喜欢第一种,标准的,所有类的对象的声明都通过  new 类的构造

JS类定义方式

// 方法1 对象直接量 var obj1 = { v1 : "", get_v1 : function() { return this.v1; }, set_v1 : function(v) { this.v1 = v; } }; obj1.set_v1('hello1'); alert(obj1.get_v1()); // 方法2 定义函数对象 var Obj = function() { var v1 = ""; this.get_v1 = function(

JavaScript中的函数的两种定义方式

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <script type="text/javascript"> /*I总结: 1.函数名可以做变量使用,可以赋值,可以传值 2.函数名当参数,传递给另一个函数 */ //==================js中函

javascript函数定义方式及作用域

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getS

C++:类的成员函数定义方式

1.成员函数的第一种定义方式:在类声明中只给出成员函数的原型,而将成员函数的定义 放在类的外部. 返回值类型 类名::成员函数名(参数表) {      函数体  } class Point{ public: void setpoint(int,int); //设置坐标点的成员函数setpoint的函数原型 int getx(); //取x坐标点的成员函数getx的函数原型 int gety(); //取y坐标点的成员函数gety的函数原型 private: int x,y; }; void P

javascript中两种定义函数方式的差别以及函数的预编译效果

我们知道在javascript中定义函数的方式有以下两种: function mm(){ } 这种形式是声明一个函数,跟 var 声明一个变量机制一样,脚本在解释执行之前会做预编译处理. var mm = function(){ } 这种形式是对一个变量赋值,虽然也做预编译,但仅仅只是给 mm 事先变量分配一个内存空间,而没有做初始化. 代码1: alert(a);//打印函数a的内存 alert(b);//undefined alert(c);//JS报错:"c"未定义 functi

开发技巧----------项目中常量类的定义方式

问题: 有开发经验的同学都知道,常量类是一个最常用的定义数据字典的方式.但是随着项目的开发时间和开发团队的变化经常会出现2中特别苦逼的情况.第一种情况是项目中到处都能看到各种各样的常量类:第二种情况是一个常量类里定义非常多的常量,甚至有的超过100了.这两种情况的缺点估计大家都非常的清楚,第一种代码离散.冗余.维护难:第二种也是维护难,更痛苦的时候用ide的时候很难找到自己需要的常量. 解决办法: 1.使用静态内部类对常量进行分组(可以多级分组,但是建议最多3级) 2.外部文件(这里不讨论) 3