Tag: 原型inheritance

为什么NodeJS util.inherits函数中的“super_”属性添加到构造函数中?

我正在研究JavaScript中的一些不同的inheritance技术。 我一直在使用NodeJS util.inherits函数为我的最新项目。 我想知道: 为什么super_属性是在构造函数而不是原型上设置的? 将它分配给超级构造函数的原型值不是更有意义吗? 由于构造函数总是可以从原型constructor属性中获取? 所以不是这样的: constructor.super_ = superConstructor; constructor.prototype = Object.create(superConstructor.prototype, { constructor: { value: constructor, enumerable: false } }); 这将是: constructor.prototype = Object.create(superConstructor.prototype, { constructor: { value: constructor, enumerable: false }, super_:{ value: superConstructor.prototype, enumerable: false } }); 这种方式调用超级函数是更容易,因为而不是: this.constructor.super_.prototype.someFunction.call(this); 它会变成这样: this.super_.someFunction.call(this); 这对我更有意义,但我很好奇,如果我失去了一些东西。 我也做了一个JSFiddle来展示这个实现。 预先感谢您的回复!

node.js – 在超类中获取ES6子类的文件名

我目前正在开发一个node.js(v5.10.1)应用程序,它使用ES6类语法来进行模块展示,尽pipe我不确定这是否与我正面临的问题特别相关。 假设我有以下目录结构: / |-command/ | |-walk/ | | |-config.json | | |-walk.js | | | |-eat/ | |-config.json | |-eat.js | |-core/ | |-app.js | |-command.js | |-config.json | |-config.js | |-job.js | |-module.js | |-job/ | |-breathe/ | |-config.json | |-breathe.js | |-init.js 位于每个.js文件中的类遵循以下inheritance: Config |-App |-Module |-Command | |-Eat | |-Walk | |-Job […]

这是一个很好的方式来做Javascriptinheritance?

可能重复: 这里使用“新”关键字的原因是什么? 我正在学习mongoose(这是一个多么美丽的软件…),我看到了这个: function Model (doc, fields, skipId) { Document.call(this, doc, fields, skipId); }; /*! * Inherits from Document. */ Model.prototype.__proto__ = Document.prototype; 哇,这是设置我见过的inheritance最简单的方法。 我知道这不能用浏览器来完成,但是服务器端…它看起来像一个赢家: 派生类将调用父类的构造函数 派生类的原型对象被设置为proto指向父类的原型。 而就是这样! 这可能是在服务器端实现inheritance的最简单,最简单的方法吗? 我在问,因为我爱上了它,想知道我是否缺less一些限制/问题…?

为什么我们应该使用Object.create?

我一直在试图理解为什么我总是在节点中看到像这样的代码: var util = require("util"); var events = require("events"); function MyStream() { events.EventEmitter.call(this); } util.inherits(MyStream, events.EventEmitter); MyStream.prototype.write = function(data) { this.emit("data", data); } 我去了文档,以便更好地理解。 util.inherits(constructor, superConstructor) 构造函数的原型将被设置为由superConstructor创build的新对象。 作为一个额外的便利,superConstructor将可以通过constructor.super_属性访问。 从那以后,我认为所有的util.inherits都是这样的: exports.inherits = function (constructor, superConstructor) { constructor.super_ = superConstructor; constructor.prototype = new superConstructor(); } 似乎对我有意义,但后来我注意到在MyStream构造函数,他们调用event.EventEmitter.call(this); 这样EventEmitter构造函数MyStream在创build的MyStream的实例上运行。 我完全被这个困惑,因为constructor.prototype = new superConstructor(); 应该是所有需要的权利? 那么我去了源,发现了实际的function签名。 exports.inherits = function(ctor, superCtor) […]

为什么nodejs不能inheritance浏览器js

我有两个构造函数,子从父inheritance一些方法和属性,它只是这样的东西 function foo(){ this.bar="baz"; } function fubar(){ this.qux="zubar"; } fubar.prototype=new foo(); fubar.prototype.constructor=fubar; module.exports.fubar=fubar; 里面的文件inheritance工作正常,但是当它被导出不能达到父母的元素我已经尝试util.inherits以及结果是相同的

我可以在ES6的父类的静态方法中使用类variables吗?

对不起,如果这是奇怪的或反模式。 假设我有一个子类的静态方法,例如(为了可读性而严格简化) class User extends Model { //… static getAll(){ db.execute('SELECT * FROM users'); } } 由于我有多个模型,我可能想要一个getAll方法,所以在Model类上定义getAll似乎很理想,它引用了一个tableName类variables。 理想情况下,它会看起来像 class Model { static getAll(){ db.execute(`SELECT * FROM ${this.tableName}`); } } //… User.tableName = 'users'; 这是行不通的,因为ES6不喜欢你定义这样的类variables。 有许多解决方法 ,例如在父项中添加tableName参数,然后在User中将User应用于该项: class Model { static getAll(tableName) { db.execute(`SELECT * FROM ${tableName}`) } } //… class User extends Model{ static getAll() […]

inheritance函数如何在Node.js中工作?

这是node.js中的inheritance函数: exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; 有人可以给我这个function的“大图”吗? 我不是100%确定我得到Object.create,而且…我很困惑! 任何帮助/指针将不胜感激… 芝加哥商业交易所。

编译Coffeescript时不要添加var

我在写一个简单的应用程序,使用John Resig的简单类inheritance 。 我在Node.js中这样做,我也使用CoffeeScript。 我试图编写CoffeeScript, 在BrowserQuest游戏中输出类似于这个文件的代码。 当我这样写CoffeeScript的时候, cls = require './class' module.exports = Model = cls.Class.extend({ init: () -> console.log 'Model.init()' }) “var”会自动添加到Model中,因此似乎不能正确导出。 var Model, cls; cls = require('../class'); module.exports = Model = cls.Class.extend({ init: function() { return console.log('Model.init()'); } }); 有没有办法标记一个variables不使用CoffeeScript的“var”?

Node.Js + Expressjs中的inheritance

我正在尝试在Node.js和Express.js中实现类似以下内容的function,但无法find有效的示例。 帮助赞赏。 base.js ——– module.exports = { baseFunction: function(){ ….. } } child.js ——– module.exports = { require('base'), ***** Some Magical Code ****** childFunction: function(){ ….. } } CallProgram.js ————– var child = require('child'); child.baseFunction();

如何“子类化”一个node.js模块

我多年来一直是Perl编程人员,但也有C ++的背景,所以我来自“经典”面向对象的背景,现在正在学习node.js。 我刚刚阅读了“面向对象的JavaScript原则” ,它很好地向像我这样有经典头脑的人解释面向对象的JS概念。 但我留下了一个问题,具体涉及到node.js和inheritance。 如果我还在用“古典”词汇来解释我的问题,请原谅我。 让我们假设我有一个模块lib/foo.js : function foo() { console.log('Foo was called'); } module.exports.foo = foo; 我想在另一个模块lib/bar.js ”这个: var foo = require('foo.js'); // Do some magic here with *.prototype, maybe? function bar() { console.log('Bar was called'); } module.exports.bar = bar; 这样我的主要脚本可以做到这一点: var bar = require('lib/bar.js'); bar.foo(); // Output "Foo was called" bar.bar(); // […]