util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。 JavaScript的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript没有提供对象集成的语言级别特性,而是通过原型复制来实现的,在此介绍unitl.inherits,示例:
var util = require('util');
function Base(){
this.name = 'base';
this.base = 1991;
this.sayHello = function(){
console.log('Hello' + this.name);
};
}
Base.prototype.showName = function(){
console.log(this.name);
}
function Sub(){
this.name = 'sub';
}
util.inherits(Sub, Base);
var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub = new Sub();
objSub.showName();
//objSub.sayHello();
console.log(objSub);
我们定义了一个基础对象Base 和一个继承自Base的Sub, Base有三个在构造函数内定义的属性和一个原型中定义的函数,通过
util.inherits 实现继承。运行结果如下:
bash-3.2$ node util_inherits.js
base
Hellobase
{ name: 'base', base: 1991, sayHello: [Function] }
sub
{ name: 'sub' }
注意,Sub仅仅继承了Base在原型中定义的函数,而构造函数内部创造的base属性和sayHello函数都没有被Sub继承。同时,在原型中
定义的属性不会被console.log作为对象的属性输出。如果我们去掉objSub.sayHello();这行注释,运行结果如下:
bash-3.2$ node util_inherits.js
base
Hellobase
{ name: 'base', base: 1991, sayHello: [Function] }
sub
/Users/bruce/Documents/test/nodejs/util_inherits.js:27
objSub.sayHello();
^
TypeError: Object #<Sub> has no method 'sayHello'
at Object.<anonymous> (/Users/bruce/Documents/test/nodejs/util_inherits.js:27:8)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
node.js 中 util.inherits
最新推荐文章于 2022-03-17 17:36:14 发布