宝哥软件园

谈nodejs中类定义和继承的例程

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

Javascript是一种极其灵活的语言。

你受不了!

个人喜欢强类型语言,比如c/c,c#等等。

但是js代表未来,所以我们需要学习。

js中有n种类定义和继承的方式。现在,让我们学习nodejs类定义和继承的固定例程。

常规1。在构造函数中始终使用instanceof运算符:

函数Base() { if(!(此实例为Base(){返回新的Base();}}上面代码的意思是:如果调用Base函数时不使用新运算符,将自动调用新运算符,并返回Base的一个实例

常规2。所有成员变量都在构造函数中定义

函数Base() { if(!(此实例为Base(){返回新的Base();}//开始成员变量定义this.className=' Base}套路三。所有成员方法都是在原型中以函数表达式的形式定义的[为什么,原因在Routine 4中的inherits源代码注释中]

base . prototype . print class name=function(){ console . log(this . class name);}拨打以下电话:

var Base=Base();//不用新操作符,直接调用函数,自动调用新操作符console . log(base . class name);base . print class name();常规4。使用util.inherits(子类,父类)进行原型继承

让我们来看看inherits :的源代码

var inherits=function(ctor,SuperCtor) {//严格相等测试:undefined/null //子类构造函数必须有if(ctor===undefined | | ctor===null)抛出新的type error(' inherit '的构造函数不得为' null或undefined ');//严格相等测试:undefined/null //父类构造函数必须有if(super ctor===undefined | | super ctor===null)抛出新的type error(' inherit '要继承的super构造函数不得''为null或undefined ');//point :如果要继承,父类必须有一个原型对象。//这就是为什么所有成员方法都在原型对象中定义!if(Superctor . prototype===undefined)引发新类型错误(‘inherits’的超级构造函数必须‘有原型’);//让子类构造函数对象向父类添加一个super_ pointer,从而形成一个继承链ctor.super _=superCtor//调用Object.setPrototypeOf(子类的原型,父类的原型)object . set prototypeof(ctor . prototype,superctor . prototype);};Object.setPrototypeOf :这个链接可以了解到setPrototypeOf方法,非常简单,它的Polyfill如下:

//仅适用于Chrome和FireFox,但不适用于ie:object . set rototypeof=object . set rototypeof | | function(obj,proto) {obj。_ _ proto _ _=proto返回对象;}让我们测试继承。

首先定义子类

Function Child() {//和以前一样,例程1 if(!(这是子级的实例){返回新的子级();}}然后根据例程4,调用inherits函数来继承原型

//请注意,inherits调用不在构造函数或原型对象中,而是全局调用inherits(Child,Base)。最后,我们调用子类的printClassName方法,该方法在基类的原型对象中实现。

子类调用基类函数-undefined.png

错误,在child.printClassName()后输出未定义!

为什么呢?

常规5。子类的构造函数使用父类。调用(this)实现父类构造函数中成员变量的继承

Function Child() {//和以前一样,例程1 if(!(这是子级的实例){返回新的子级();}//加上这句话,就可以正常输出Base.call(this)的Base字符串了,方法是调用printClassName//如果要更新基类的成员变量,请在Base.call(this)之后!这个。_ className=' Child//调用printClassName正常输出子字符串}Function.prototype.call()

因此,nodejs中的继承需要:

调用父类。在构造函数中调用(this)来继承父类的成员变量

全局调用inherits(子类,父类)来继承父类的成员函数

以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。

更多资讯
游戏推荐
更多+