推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

JavaScript中定义类的方式详解

   2023-06-24 网络整理佚名2080
核心提示:本文实例讲述了中定义类的方式。好,我们可以根据上面的代码总结得到:用var可以定义类的属性,而用this能定义类的属性。在类的方法中访问自己的属性,对于公有属性和私有属性的访问方法有所不同,请大家看下面的代码关于中的OOP实现就聊到这里,以上是最实用的内容,一般用定义类,创建对象用以上的代码已经足够了。类定义的四种方式:

高手教程收集整理的这篇文章主要介绍高手教程。 师傅觉得非常好。 现在我就分享给大家,给大家一个参考。

本文中的示例描述了在 . 分享给大家,供大家参考,如下:

它本身不支持面向对象,没有访问控制字符,没有定义类的关键字class,不支持继承或冒号,也不支持虚函数。 不过,它是一种灵活的语言,下面我们来看看如何实现不使用关键字class的类定义并创建对象。

1.定义一个类并创建该类的实例对象

在 中,我们使用如下方式定义类:

function Shape()
{
var x = 1 ;
var y = 2 ;
}

你可能会说,怀疑? 这不是函数定义吗? 没错,这就是定义函数。 我们定义了一个 Shape 函数并初始化了 x 和 y。 不过,如果换个角度看,这是定义了一个Shape类,它有两个属性x和y,初始值分别是1和2,但是我们定义该类的关键字不是班级。

然后,我们可以创建 Shape 类的对象,如下所示:

标题">代码如下:

var = 新形状();

2.定义公有和私有属性

我们已经创建了该对象,但是当我们尝试访问其属性时,会出现错误,如下所示:

标题">代码如下:

.x = 1;

这意味着用 var 定义的属性是私有的。我们需要使用 this 关键字来定义公共属性

function Shape()
{
this .x = 1 ;
this .y = 2 ;
}

这样我们就可以访问Shape的属性了,比如。

标题">代码如下:

.x = 2;

好了,根据上面的代码我们可以得出结论:用var来定义类的属性,用this来定义类的属性。

3. 定义公共和私有方法

在 中,函数是类的实例,是间接继承的。 因此,函数也是对象。 因此,我们可以使用赋值的方法来创建函数。 当然,我们也可以将函数赋值给类的属性变量。 那么,这个属性变量就可以称为方法,因为它是一个可执行函数。 代码如下所示:

function Shape()
{
var x = 0 ;
var y = 1 ;
this .draw = function ()
{
// print; 
};
}

我们在上面的代码中定义了一个平局,并为其分配了一个。 接下来我们就可以调用这个函数了,在OOP中称为公共方法,如:

标题">代码如下:

。画();

如果用var定义的话,那么这个draw就变成了,在OOP中称为私有方法,比如

function Shape()
{
var x = 0 ;
var y = 1 ;
var draw = function ()
{
// print; 
};
}

这样就无法使用.draw来调用这个函数。

3.构造函数

它不支持OOP,所以当然没有构造函数。 不过,我们可以自己模拟一个构造函数,这样在创建对象时就会自动调用它。 代码如下:

function Shape()
{
var init = function ()
{
// 构造函数代码 
};
init();
}

在Shape的最后,我们人为的调用了init函数,那么,在创建Shape对象的时候,init总是会被自动调用,这样就可以模拟我们的构造函数了。

四、带参数的构造函数

如何让构造函数带参数?其实很简单,只需要把要传递的参数写到函数的参数列表中即可,比如

function Shape(ax,ay)
{
var x = 0 ;
var y = 0 ;
var init = function ()
{
// 构造函数 
x = ax;
y = ay;
};
init();
}

有了这个,我们可以创建这样的对象:

标题">代码如下:

第6073章

5. 静态属性和静态方法

如何在?中定义静态属性和方法,如下

function Shape(ax,ay)
{
var x = 0 ;
var y = 0 ;
var init = function ()
{
// 构造函数 
x = ax;
y = ay;
};
init();
}
Shape.count = 0 ; // 定义一个静态属性count,这个属性是属于类的,不是属于对象的。 
Shape.staticMethod = function (){}; // 定义一个静态的方法

有了静态属性和方法,我们就可以使用类名来访问它,如下

alert ( aShape.count );
aShape.staticMethod();

注意:静态属性和方法是公共的。 目前还不知道如何将静态属性和方法设为私有~

6.在方法中访问该类的公有和私有属性

在类的方法中访问您自己的属性。 公共属性和私有属性的访问方式不同。 请看下面的代码

function Shape(ax,ay)
{
var x = 0 ;
var y = 0 ;
this .gx = 0 ;
this .gy = 0 ;
var init = function ()
{
x = ax; // 访问私有属性,直接写变量名即可 
y = ay;
this .gx = ax; // 访问公有属性,需要在变量名前加上this. 
this .gy = ay;
};
init();
}

七、注意事项

根据作者的经验,类中的this并不总是指向我们的对象本身。 主要原因是它不是OOP语言,函数和类都是定义的,这当然会带来一些小问题。

当this指针错误时,通常是在事件处理中。 我们希望对象的成员函数能够响应事件。 当事件被触发时,系统会调用我们的成员函数。 但是,传递过来的this指针已经不再是我们自己的对象了,当然,这时候在成员函数中调用this当然会出错。

解决方案是我们在定义类之初将其保存在私有属性中,稍后我们可以使用该属性来代替 this。 我用这个方法使用这个指针还是比较安全的,很省心~

我们修改一下代码来解决这个问题。对比第六部分的代码,你一定明白了

function Shape(ax,ay)
{
var _this = this ; // 把this保存下来,以后用_this代替this,这样就不会被this弄晕了 
var x = 0 ;
var y = 0 ;
_this.gx = 0 ;
_this.gy = 0 ;
var init = function ()
{
x = ax; // 访问私有属性,直接写变量名即可 
y = ay;
_this.gx = ax; // 访问公有属性,需要在变量名前加上this. 
_this.gy = ay;
};
init();
}

上面我们讲了如何在 中定义类,创建类的对象,创建公有和私有的属性和方法,创建静态属性和方法,模拟构造函数,以及讨论@@的this。

以上是最实用的内容。 一般来说,用上面的代码定义类和创建对象就足够了。 当然,你也可以使用 or 来定义类并创建对象。 我用过这个框架,感觉非常好。 它更加完美地模拟了类,并且还支持类继承。 有兴趣的读者可以尝试一下。 当然,如果使用框架的话,需要在网页中包含相关的js头文件,所以我还是希望读者能够在不使用框架的情况下创建类,这样代码效率更高,同时你也可以看到,创建一个简单的类并不麻烦~

补充:

类定义有四种类型:

// 1、工厂方式
function createCar(name,color,pricE){
  var tempcar=new Object;
  tempcar.name=name;
  tempcar.color=color;
  tempcar.price=price;
  tempcar.getName=function(){
   document.write(this.name+"-----"+this.color+"
"); }; return tempcar; } var car1=new createCar("工厂桑塔纳","red","121313"); car1.getName(); // 2、构造函数方式 function Car(name,pricE){ this.name=name; this.color=color; this.price=price; this.getColor=function(){ document.write(this.name+"-----"+this.color+"
"); }; } var car2=new Car("构造桑塔纳","121313"); car2.getColor(); // 3、原型方式 function proCar(){ } proCar.prototype.name="原型"; proCar.prototype.color="blue"; proCar.prototype.price="10000"; proCar.prototype.getName=function(){ document.write(this.name+"-----"+this.color+"
"); }; var car3=new proCar(); car3.getName(); // 4、动态原型方式 function autoProCar(name,pricE){ this.name=name; this.color=color; this.price=price; this.drives=new Array("mike","sue"); if(typeof autoProCar.initialized== "undefined"){ autoProCar.prototype.getName =function(){ document.write(this.name+"-----"+this.color+"
"); }; autoProCar.initialized=true; } } var car4=new autoProCar("动态原型","yellow","1234565"); car4.getName(); car4.drives.push("newOne"); document.write(car4.drives);

希望这篇文章对大家的编程有所帮助。

概括

以上就是大佬教程为您收集整理的全部内容。 希望本文能够帮助您解决遇到的程序开发问题。

如果您觉得大佬教程网站的内容还不错,欢迎向程序员朋友推荐大佬教程。

 
标签: 构造函数
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON