js构造函数怎么写

JavaScript08

js构造函数怎么写,第1张

由于js类的定义方法和函数的定义方法一样,

所以定义类的同时就定义了构造方法。

function Person(name,sex){ // 类,同时定义构造方法

this.eat=function(){ // 类中的方法

alert("eating")

}

this.name = name// 类中的属性

this.sex = sex

}

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。

特点:

1.构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;

2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;

3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;

4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;

5.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。

6.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)。

js当然有类的概念,而且它和java一样,被设计成纯粹的面向对象的语言。js是弱类型语言,但这个并不意味着它没有类的概念。很明显地,我们经常能看到new Date()、new Array()之类的调用。这不就是类吗?

一、定义类

那我们如何在js中自定义一个类呢?其实应该换个说法,我们该怎么获取一个某种自定义类型的对象。

// 自定义类Class

function Class(){

}

// 实例化Class

var clazz = new Class()

没错,上面就是一个自定义类型对象的获取方式。我们将一个函数视作构造函数,然后配合new关键字调用这个函数,它就会返回某一类型的对象。如果我们执行clazz instanceof Class,返回结果就是true,说明clazz确实是Class类的实例。

基于题主应该对java比较了解,那么我就将上面的js代码翻译成对应的java代码以便理解:

public class Class{

}

Class clazz = new Class()

与Java一样,js中所有对象都是默认继承自Object类的,所以无论是js还是java,执行clazz instanceof Object返回的都是true。

二、成员变量

我们知道,所谓成员变量,是指这个类的实例对象具有哪些属性。先看看Java中如何定义成员变量:

public Class {

    public String name

    public int length = 0

}

然后对照js代码:

function Class(){

    this.name = null

    this.length = 0

}

这里引出一个this,在js中,简单来讲,this就是指向当前对象,但实际上js中的this并不好理解,这里也不会试图讲清楚js中this怎么用。