Tag: 原型

在express.js中实例化的控制器中的“this”的意外值

“this”似乎并不涉及实例化的预算控制器对象。 相反,它似乎是指全局对象。 有人知道为什么吗? 我已经定义了一个预算模型。 注入控制器,我试图简单地生成一个随机的6个string,当我在我的应用程序中打/预算。 相反,这个.DEFAULT_SLUG_LENGTH是不确定的,我不明白为什么。 这是一个愚蠢的testing案例,说明这个问题。 在引用另一个函数中的this.budget来根据slug值查询数据库时,我遇到了类似的问题。 //models/budget.js var Schema = require('jugglingdb').Schema; var schema = new Schema('postgres',{url:process.env.DATABASE_URL}); var Budget = schema.define('budgets',{ total: Number, slug: String }); module.exports = Budget; ==================== //controllers/budget.js function BudgetController (budget) { this.budget = budget; }; BudgetController.prototype.DEFAULT_SLUG_LENGTH = 6; BudgetController.prototype.generateSlug = function (req,res) { var slug = ""; var possible = […]

为什么把方法放在类的原型而不是在构造函数中声明呢?

我想了解更多关于原型inheritance,我有点混淆添加方法的原型和添加到实例之间的差异。 我为什么要做另一个呢? 原型方法: function Foo() {} Foo.prototype.doBar = console.log.bind(console, 'Did bar!'); var foo = new Foo(); foo.doBar(); // prints "Did bar!" 实例方法: function Foo() { this.doBar = console.log.bind(console, 'Did bar!'); } var foo = new Foo(); foo.doBar(); // prints "Did bar!" 把我的方法放在原型上有什么好处? 是否有一段时间通过构造函数声明实例上的方法更有意义?

Javascript:如何获取对象的原型链构造函数名称的列表?

我最近遇到一个有趣的问题。 我正在开发一些现有的代码,无论好坏,通常有几个级别的原型inheritance结束于各种各样的对象的构造函数。 其中每一个最终都从一个基础“类”inheritance。 每个构造函数遵循以下inheritance模式,其中Sub是子类, Super是直接原型: function Sub(/*args*/) { Super.call(this,/*args*/); } Sub.prototype = Object.create(Super.prototype); 这种模式一直延续到单个基类。 发现这对于我们的需要来说是非常有益的,为每个对象在原型链上存储一个构造函数名称列表,我为基类提供了以下代码,它使用了arguments对象的callee和caller属性: var curConstructor = arguments.callee; this.constructorList = [curConstructor.name]; while(curConstructor.caller && curConstructor.caller.name !== ''){ curConstructor = curConstructor.caller; this.constructorList.push(curConstructor.name); } 与此相关的主要问题是, 只有当对象是在匿名函数(或全局作用域)内部构造的时候才有效。 例如,假设我有一个构造函数SubA1与原型SubA与原型Base ,如果我这样做: function() { var aOk = new SubA1(); function oops() { var aNotOk = new SubA1(); } oops(); } aOk的构造函数列表是: […]

instanceof在节点4中评估为真,但不在节​​点6中评估

当我在节点4中执行此操作时,最后一条语句的计算结果为true ,但是在节点6中,它的计算结果为false 。 为什么? F = () => {}; F.prototype = {}; Object.create(F.prototype) instanceof F;

node.js中对象的方法和属性之间的区别

我想了解对象的属性如何与对象的原型上定义的方法相关联。 下面的代码打印“ECMA样式5”,而我期望它打印“ECMA样式3”。 var util = require('util'); function MyError() { } util.inherits(MyError, Error); Object.defineProperty(MyError.prototype, 'toJSON', { enumerable: false, value: function () { return 'ECMA5 style'; } }); MyError.prototype.toJSON = function() { return 'ECMA3 style'; } var x = new MyError(); console.log(JSON.stringify(x)); 我正在阅读一篇文章,但是我无法理解为什么样式3没有打印,因为它在文件中被定义为第二个。 不应该重写现有的方法定义吗? 我正在运行节点v0.10.21

JavaScriptclosures和原型

我以为我已经理解了闭包的想法,但是下面的代码对我来说意外的performance: function A(x) { this.getX1 = function () { return x; } A.prototype.getX2 = function () { return x; } } var a1 = new A(1); var a2 = new A(2); console.log ('a1.getX1()=%d', a1.getX1 ()); // 1 console.log ('a2.getX1()=%d', a2.getX1 ()); // 2 console.log ('a1.getX2()=%d', a1.getX2 ()); // 2 ??? console.log ('a2.getX2()=%d', a2.getX2 ()); // […]

Javascript模块:原型与导出

我是新的node.js(和stackoverflow),并没有find一个确切的解释。 这可能是一个试用的答案,但希望它可以帮助别人也从Python /其他面向对象的框架转换。 我见过其他文章,关于js中的原型概念是什么,然后是其他解释node.js的module.exports的其他文章。 我正在研究Ghost CMS,他们都使用这两个。 我似乎无法找出为什么他们会在某些情况下select一个。 任何帮助表示赞赏,即使它指向我的其他链接。

在node.js中导出一个原型:module.exports = Prototype or exports.Prototype = Prototype?

什么是在node.js中导出原型的首选方法? 你可以采取两种方法: 导出原型本身 function A () { } module.exports = A; 用作: var A = require('./A.js'); var a = new A(); 将包含原型的对象导出为属性 function A () { } exports.A = A; 用作: var A = require('./A.js').A; var p = new A(); 第一个解决scheme对我来说看起来要方便得多,不过我知道有关于replaceexports对象的担心。 哪两个最好用,为什么?

创build自定义EventEmitter时是否需要events.EventEmitter.call(this)?

在自定义事件发射器构造函数中有很多不使用events.EventEmitter.call(this)的例子,而其他的则使用它( 官方文档 ): var events = require('events') , util = require('util'); var MyEmitter = function () { events.EventEmitter.call(this); }; util.inherits(MyEmitter, events.EventEmitter); MyEmitter.prototype.write = function () { this.emit('tick'); }; 随着我对JavaScript的基本理解,我不知道是否需要它。 是否需要调用EventEmitter初始化的东西?

如何在node.js中使用原型

我在nodejs上编写我的第一个模块。 我需要从谷歌cachingparsing我的网站。 post是桌子的地图。 当我尝试使用这个模块,我有这个错误:“types错误:不能设置未定义的属性”原型“如何解决这个错误?这是我的代码: module.exports = function Post(documentDOM,options) { this.opts = $.extend({id:0,author_id:0},options); this.doc = documentDOM; this.post = { id: 0, name: '', alt_name: '', notice: '', content: '', author: '', author_id: 0, }; } module.exports.Post.prototype = { init: function() { this.post.id = this.opts.id; this.post.author_id = this.opts.author_id; }, content: function() { content = this.doc.find('.fullnews-content').html(); if(!content.length) content […]