Tag: 原型inheritance

NodeJS对象的inheritance

我有一个扩展Error对象的自定义错误对象: function GTError(reason, loglevel, meta) { winston.log(loglevel, reason, meta); GTError.super_.apply(this, arguments); } util.inherits(GTError, Error); 我知道这是行不通的, 这个问题有解决方法。 我的问题不是如何解决这个问题,我的问题是为什么它不工作? 为什么要调用GTError.super_.apply(this, arguments); (其中GTError.super_是Error )不填充此message属性? 你能解释一下吗? 谢谢

Nodejs + expressjs中的类成员inheritance

我不太了解类inheritance和上下文在nodejs + expressjs中是如何工作的。 我有3个文件: api.js class API { constructor () { this._id = Math.random() console.log("Instantiated id:" + this._id) } list (req, res, next) { console.log("Instantiated id:" + this._id) } } module.exports = API user.js的 const API = require('./api.js') class UserAPI extends API { constructor () { super() } } module.exports = UserAPI route.js var UserAPI […]

如何正确从string内置类inheritance

我想扩展使用ES6类的内置JS String类。 即只是从stringinheritance。 但是,下面的代码不起作用。 +=运算符将myStr实际types更改为String 。 AFAIK,JS中没有运算符inheritance。 那么,如何避免这种行为呢? class QString extends String { isEmpty() { return this.length === 0; } } var testStr = new QString(); console.log(testStr.isEmpty()); testStr += new QString("abc"); console.log(testStr.isEmpty()); // 'TypeError: testStr.isEmpty is not a function' PS我知道有机会添加一个新的方法String.prototype 。 但这是一个不好的做法。 UPD :我明白JS中没有+运算符重载,原来的答案很清楚。 但是,它完全没有提到inheritance和ES6类。 我想至less应该保存被接受的答案。

无法看到从子对象添加到原型的属性

我需要一些帮助了解如何JavaScript protoypalinheritance工作…或者说为什么它不做我期待它做的事情。 基本上我试图build立new语句返回的模板对象。 我在utils.js模块中有一个通用的构造函数,它将参数对象中的任何值赋给相应的模板对象,作为调用new的结果,我返回了修改过的模板对象。 module.exports.ctor = ctor; //Mapped object constructor function ctor(template) { return function(args) { var s, t, p; //guard against being used without new //courtesy of John Resig http://ejohn.org/blog/simple-class-instantiation/ if (!(this instanceof arguments.callee)) { throw new Error("Constructor called without 'new'"); } //create a deep copy of `template` to modify t = JSON.parse(JSON.stringify(template)); args […]

使用TypeScriptinheritance不起作用浏览器端

先前对此的讨论: inheritanceTypeScript和导出的类和模块 这是从ValidatorMessage.class.ts生成的源代码: ///<reference path='./def/lib.d.ts'/> ///<reference path='./def/node.d.ts'/> var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; var message = require("./Message.class"); var ValidatorMessage = (function (_super) { __extends(ValidatorMessage, _super); function ValidatorMessage() […]

Javascriptinheritance对象覆盖其他inheritance对象

有人可以请解释什么是正确的方法是从父母inheritance多个对象,并有自己的原型function? 我试图在nodeJS中做到这一点。 我有这些文件。 ParserA_file var ParentParser = require('ParentParser_file'); module.exports = ParserA; ParserA.prototype = Object.create(ParentParser.prototype); ParserA.prototype.constructor = ParserA; ParserA.prototype = ParentParser.prototype; function ParserA(controller, file) { ParentParser.call(this, controller, file); this.controller.log('init — INIT \'parser_A\' parser'); this.date_regex = /([0-9]{1,2})?([AZ]{3})?([0-9]{2})? ?([0-9]{2}:[0-9]{2})/; this.date_regex_numeric = /(([0-9]{1,2})([0-9]{2})([0-9]{2}))? ?([0-9]{2}:[0-9]{2})?/; this.date_format = 'DDMMMYY HH:mm'; } ParserA.prototype.startParse = function() { console.log('Starting parse for A'); } ParserB_file […]

在Express上使用外部模块进行Jade模板inheritance的一个很好的策略

我正在开发一个框架,开发人员可以在外部模块中实现一个子模板。 我想稍后将该模板包含在父模板中。 这是一个基本的模板模式: ─使命(母模板) ├─接替任务(小孩模板) ├─失败的任务(儿童模板) └─玩任务(儿童模板) 父模板对每个人都是一样的。 子模板由贡献者实现,并始终显示在不同的时刻(任务状态)。 我在一个模板文件中尝试两种方法。 实施“块”模式: block mission_play h2 Hello world! p Lorem ipsum dolor sit amet, consectetuer adipiscing elit. block mission_succeed h2 Congratulations! p You won buddy! block mission_failed h2 Oh my gosh, dude, you did something realy bad p You should try again 这一个不会工作,因为我没有任何extend layout指令(我不能使用,因为每个子模板是一个外部模块)。 有什么办法可以手动指示玉哪个模板扩展? 在mixin中实现每个子模板: mixin […]

问题获取Node.js Express 3.x模板inheritance与Swig通过consolidate.js

我可以得到'独立'的模板来渲染这个代码很好,但我不能让模板inheritance工作。 有什么我可以忽略的或任何其他的警告任何人知道? 错误:在“… /views/index.html”的第3行find循环扩展! app.js: var express = require('express') , cons = require('consolidate') , http = require('http') var app = express(); app.engine('html', cons.swig); app.set('view engine', 'html'); app.set('views', __dirname + '/views'); app.set('view options', { layout: false }); app.get('/', function(req, res){ res.render('index.html', { header: 'Express' }); }); http.createServer(app).listen(3000, function(){ console.log("Express server listening on port 3000"); }); 的index.html […]

Node.js奇怪的原型inheritance

我一直在通过Manuel Teixiera来跟踪Node.js ,而我在通过Event Emitter章节时偶然发现了这个奇怪的行为。 作者build议的代码包含如下内容: var EventEmitter = require("events").EventEmitter; var util = require ("util"); var MyClass = function() {}; util.inherits(MyClass, EventEmitter); var instance = new MyClass(); instance.on("custom", function() { console.log("Holo"); }); instance.emit("custom");*/ 哪个输出“霍洛”就好。 但是,我也阅读了关于如何使用new Function();文档和SO问题 new Function(); 是一种反面模式,面对JavaScript的原型inheritance使用。 David Walsh的这篇文章阐明了在js上强制经典inheritance和使用其原型inheritance的function之间的区别。 所以,我试图通过重写它来修改我的代码: var EventEmitter = require("events").EventEmitter; var clock = {}; util.inherits(clock, EventEmitter); clock.on("custom", function(){ console.log("Holo"); }); […]

为什么在Node.js中使用util.inherits和.call来inheritance

我想知道为什么,当在节点中创build一个新的stream类时,我需要同时使用call和util.inherits 例如,在以下用于创build可读stream的代码中,我必须使用以下两个: var Readable = require('stream').Readable; var util = require('util'); var MyStream = function (options) { Readable.call(this, options) } util.inherits(MyStream, Readable); //Hasn't this already inherited all methods from Readable via "call" var stream = new MyStream(); 这似乎是Readable.call从Readable调用构造函数,因此util.inherits是不必要的。