[笔记][JavaScript]建构器及实体物件的constructor特性

HI,大家好!因为之后会提到建构器间的继承,所以在那之前先提一下constructor这个特性的用途,这个特性在前两篇的[笔记][JavaScript]使用建构器创造实体物件和[笔记][JavaScript]原型(prototype)在JavaScript中的两种意思都有稍微提过,让我们用这一篇文章再来加深一些印象。

一般来说,每个函式都会有一个原型物件function.prototype,而他的特性constructor会指向函式自己,以下例子:

//宣告一个空函式function Func(){};//去判断他原型中的constructor特性Func.prototype.constructor; //会回传func本身//拿来和函式本身比较Func === Func.prototype.constructor; //会回传true

好,再来就像之前说的,使用建构器创造出来的实体物件也会有一个constructor特性,这时候的constructor也会指向建构器本身,以下例子:

//宣告一个空函式用来当建构器使用function Func(){};//使用该建构器建构一个实体物件var obj = new Func();//来试着判断实体物件中的constructor特性obj.constructor; //会回传func本身//接着直接比较看看obj.constructor === Func; //会回传true

接着我们统整一下上述的观念,在一个建构器FuncFunc.prototype.constructor;和他建构出来的实体物件的constructor特性都会指向Func本身,所以我们可以用一个实体物件来建构出有相同建构器的实体物件,以下例子:

//宣告一个空函式用来当建构器使用function Func(){};//使用该建构器建构一个实体物件var objA = new Func();//经过上面的例子我们可以知道objA.constructor会等于建构器本身Func === objA.constructor; //回传true//使用objA来建立一个拥有相同建构器的实体物件var objB = new objA.constructor();//用instanceof判断是否为建构器Func的实体物件objB instanceof Func; //回传true

另外顺便提一下建构器中的prototype特性,通常每个函式都会有该特性,而且我们不会去取代这个特性原本有的内容(例如constructor),而是在该特性中建立新的方法。以下範例:

//宣告一个空函式function Func1(){};//通常是不会去取代他的prototype,就像以下这样Func1.prototype = {    writeThis:function(){        console.log(this);    },};//为了避免盖掉prototype,所以我们会在原本的prototype中建立方法//宣告一个空函式function Func2(){};//在原本的prototype中新增方法Func2.prototype.writeThis = function(){    console.log(this);};

以上例子的技巧可以使用在必须处理某个建构器的实体,并且想要建立出和某个实体相同的方法来说很方便,更进一步可以把该方法写进建构器的prototype中来使用:

//宣告一个空函式来当建构器使用function Func(){};//在该建构器的prototype建立一个方法特性Func.prototype.copyObj = function(){    return new this.constructor();};//先建构一个实体物件var objA = new Func();//使用该实体物件继承来的copyObj方法来建构第二个有同样建构器的实体物件var objB = objA.copyObj();//最后来判断他是否为建构器Func的实体物件objB instanceof Func; //回传true

以上是对constructor特性的一些说明和应用,如果有说明错误或不明白的地方,麻烦再留言告知我,我会尽速改正!!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章