在Javascript中,你可以使用一个类(class)来实现面向对象编程(面向对象编程)。然而,在Javascript中的类是不同于java,和其相应的定义和用途是不同的。



Javascript中类的定义



在Javascript中,来自同一个原型(原型)对象的所有对象都派生出一个类;也就是说,Javascript类是对象集合的概念,如果两个对象是同一个原型,则它们属于同一类;Javascript类甚至不需要类名:



复制代码代码如下所示:

var = x:42 };

创建一个object.create(P);

var b = object.create(P);

console.log(a b); / /假

console.log(Object.getPrototypeOf(一)= object.getprototypeof(B)); / /真的





在上面的例子中,对象A和B具有相同的原型对象(原型)p,所以A和B属于同一个类(虽然这个类没有类名),它们继承了原型对象p的值42的x。



从这个例子中,我们可以看到原型对象的作用相当于模板,模板可以从它生成和创建多个对象。它的地位是相同的类的代码(代码)在java语言中,它是在Javascript中的类定义的核心。在下面的例子中,原型对象看上去更像是该类的代码。



复制代码代码如下所示:

var { { { {

INCREMENT_BY: 1,

增量:函数(x){

返回x + this.increment_by;

}

}

创建一个object.create(P);

var b = object.create(P);

console.log(a.increment(7)); / / 8

console.log(b.increment(9)); / / 10





在上面的例子中,原型对象定义了一个价值1的财产(P increment_by)和调用函数的增量,和对象A和B得到increment_by和增量从P函数模板。在调用对象A或B的增值功能,Javascript会尝试得到一个A或B increment_by(这个。increment_by);因为increment_by从P得到的,所以值1从模板采集,具有相同的值的变量,静态变量类似于java(静态变量),所以在使用变量名称的大写字母increment_by上面的例子。



在上面的例子中,所有的对象(属于同一类)从模板P创建完全相同的性质和行为。但事实上,对于不同的同一类的对象,他们有自己独特的属性和行为除了具有类定义的属性和行为。因此,如果你需要使用原型作为一类,你必须做出一定的定制每个从它派生的对象。



复制代码代码如下所示:

var { { { {

increment_by:1,

增量:函数(x){

返回x + this.increment_by + this.custom_increment_by;

}

}

创建一个object.create(P);

var b = object.create(P);

a.custom_increment_by = 0;

b.custom_increment_by = 1;

console.log(a.increment(7)); / / 8

console.log(b.increment(9)); / / 11





在这个例子中,对象A和B创建模板P有一个变量custom_increment_by不一定相等,而其增值的最终结果()函数的custom_increment_by.in总价值相关,定制新的对象的工作往往是在一个统一的功能进行。



复制代码代码如下所示:

var { { { {

increment_by:1,

增量:函数(x){

返回x + this.increment_by + this.custom_increment_by;

}

}

功能getincrementalclassobject(customincrementbyvalue){

incrementalobj = object.create VAR(p);

incrementalobj.custom_increment_by = customincrementbyvalue;

返回incrementalobj;

}

创建一个getincrementalclassobject(0);

var b = getincrementalclassobject(1);

console.log(a.increment(7)); / / 8

console.log(b.increment(9)); / / 11





所以,P(getincrementalclassobject)和原型对象功能完成了一个类的定义:通过调用getincrementalclassobject()函数获得原型对象是一个对象,并调用getincrementalclassobject()过程中的功能可以定制,这些新对象。值得注意的是,此时已定义的类没有类名,即增量为描述的方便。



回首在getincrementalclassobject做()函数,你可以看到,从增量类创建新对象的过程如下:



1。创建一个空对象,并将它的原型对象定义为p。

2。根据不同的参数值定制新的空对象。

三.返回已定制的新对象。

在Javascript中,类的定义和新对象的创建可以通过构造函数(构造函数)很快完成。



Javascript的构造函数(构造函数)



从增量类在这个例子中我们可以看到,代码的类两部分来创建原型对象作为模板的新定义,创建一个自定义函数来初始化新对象;从阶级通过三个进程创建一个新的对象:指定原始对象,新的对象初始化新的对象并返回/定制新的目标。在Javascript,所有这一切都可以通过构造函数(constructor)完成。



Javascript中的构造函数是一个函数(函数),它假定新对象的初始化函数,构造函数的原型用作模板来创建新对象:



复制代码代码如下所示:

函数的增量(customincrementbyvalue){

this.custom_increment_by = customincrementbyvalue;

}

incremental.prototype = { {

increment_by:1,

增量:函数(x){

返回x + this.increment_by + this.custom_increment_by;

}

}

var =新增量(0);

var =新增量(1);

console.log(a.increment(7)); / / 8

console.log(b.increment(9)); / / 11



通过新关键字,使用构造函数创建新对象的过程实际上经历了以下几个阶段:



创建一个新的空对象。



1。将对象的原型对象指向构造函数函数的原型属性。

2。将这个对象作为这个参数并执行构造函数函数。

三.这是在以前的getincrementalclassobject工作相同()函数。



类的名称



当一个对象被创建构造函数,相应的对象类的名称,这可以从instanceof运算符的结果验证。

复制代码代码如下所示:

console.log(一个是增量); / /真的

console.log(B是增量); / /真的



然而,instanceof运算符不确定对象是否是通过增量的构造函数创建。instanceof运算符只确定对象的对象是incremental.prototype.when有两个原型构造函数一样,instanceof运算符将返回到真正的统一,没有区别,是用来创建对象的构造函数之间。

复制代码代码如下所示:

功能incremental2(customincrementbyvalue){

this.custom_increment_by = customincrementbyvalue + 3;

}

incremental2.prototype = incremental.prototype;

console.log(一个是incremental2); / /真的