龙空技术网

JavaScript建构器及实体物件的constructor特性

JAVA茶杯会 115

前言:

目前看官们对“js实体类”大致比较注意,朋友们都需要了解一些“js实体类”的相关资讯。那么小编同时在网上网罗了一些关于“js实体类””的相关资讯,希望兄弟们能喜欢,我们一起来了解一下吧!

HI,大家好!因为之后会提到建构器间的继承,所以在那之前先提一下constructor

一般来说,每个函式都会有一个塬型物件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

接着我们统整一下上述的观念,在一个建构器Func中Func.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特性的一些说明和应用,如果有说明错误或不明白的地方,麻烦再留言告知我,我会尽速改正!!

标签: #js实体类