Node.js的原型继承函数util.inherits
2016-08-20 14:50
253 查看
util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数。JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的,具体细节我们在附录A中讨论, 在这里我们只介绍 util.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 实现继承。运行结果如下:
base Hello base { name: 'base', base: 1991, sayHello: [Function] } sub { name: 'sub' }
注意,Sub 仅仅继承了 Base 在原型中定义的函数,而构造函数内部创造的 base 属 性和 sayHello 函数都没有被 Sub 继承。同时,在原型中定义的属性不会被 console.log 作 为对象的属性输出。如果我们去掉 objSub.sayHello(); 这行的注释,将会看到:
node.js:201 throw e; // process.nextTick error, or 'error' event on first tick ^ TypeError: Object # has no method 'sayHello' at Object.
如果Sub改成以下的代码,就会继承Base构造函数内定义的属性
function Sub(){
// 如果要继承构造函数内部的属性和方法,
// 可以使用 call apply
Base.call(this);
this.name = "son";
}
相关文章推荐
- Node.js的原型继承函数 util.inherits
- Node.js的原型继承函数util.inherits + 开发框架Express4.x
- node.js javascript理解原型继承
- Node.js的原型继承函数 util.inherits
- Node.js的原型继承函数 util.inherits
- JS 原型继承
- 一种 动态 样式 语言. LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。
- Js面向对象漫谈(2) 继承--原型链,借用构造函数,组合式,寄生式, 寄生组合式
- js原型、继承
- js原型继承实现
- JS继承--原型链继承和类式继承
- js高级程序设计--面向对象的理解(包括原型和继承)
- 前端开发必须知道的JS(一) 原型和继承
- 构造函数+原型混合方式实现js的继承
- js原型、继承
- js真正的原型继承
- 再谈js原型继承
- JS原型继承实例
- 前端开发必须知道的JS之原型和继承
- js原型、继承