Tag: 原型

Array.prototype.each = function(callback){for(var i = 0; i <this.length; i ++)callback(this ); } – 这个可以吗?

我知道这是一个味道的问题,但每次我想迭代数组的时候,我的味道使用for循环是坏的。 所以我想出了这个: Array.prototype.each = function(callback) { for (var i = 0; i < this.length; i++) callback(this[i]); } 现在我可以这样做: [10, 20, 30].each(function(n) { console.log(n/10) }) 后来我在互联网上发现了一些提示这种方法的提示,但是我仍然怀疑它是否没有副作用。 这似乎很明显,这是我的担心:) 我没有使用任何类似jQuery或Prototype的库。 我正在为Node.js编码

Javascript对象原型参考

据我所知,以下第二种情况应该是真实的,但实际上是错误的。 那为什么不是这样? 情况1 var P = function(){}; P.prototype.get = function(){}; var p = new P,q = new P; console.log(q.__proto__ === p.__proto__) //true 案例2 var PP = function(){ var P = function(){}; P.prototype.get = function(){}; return new P; }; var p = PP(), q = PP(); console.log(q.__proto__ === p.__proto__) //false

如何使用Prototype Ajax.request捕获stream结果

高层次概述: 我有一个nodejs expressjs服务器,它使用名为pg的PostgreSQL nodejs驱动程序。 我有一个HTML文件提供给客户端浏览器,当你点击一个button调用expressjs服务器上的expressjs路由。 这条路线将从PostgreSQL数据库中select数据并将其返回给客户端html文件。 问题是路由对查询中选中的每一行发出一个响应给数据库。 所有的客户端(HTML浏览器)都是第一行。 我可以写入到nodejs控制台服务器端,并获得所有的行显示,但显然,我知道我的网页上很好。 问题:如何让我的客户端html文件写入到客户端的控制台上,以便从expressjs route / pg中发出的每一行? 我的假设是在客户端onSuccess将被解雇我的expressJS路线发出的每一行。 NodeJS \ ExpressJS服务器文件: var express = require('express'); var pg = require('pg'); var app = express(); var MemoryStore = express.session.MemoryStore; var conString = "postgres://joe_user:password@localhost/dev_db"; var client = new pg.Client(conString); client.connect(); app.get('/home', function(req,res){ res.sendfile(__dirname + '/views/index.html'); }); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use ( express.session ( […]

为什么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来展示这个实现。 预先感谢您的回复!

使用原型的优点,vs直接在构造函数中定义方法?

我想知道是否有任何优势使用其中的任何一个,我该走哪条路? 构造方法: var Class = function () { this.calc = function (a, b) { return a + b; }; }; 原型方法: var Class = function () {}; Class.prototype.calc = function (a, b) { return a + b; }; 我不喜欢这样,使用原型,方法定义是从类中分离出来的,我不知道是否有任何特定的原因,我应该只用第一种方法。 另外,是否有利用函数文字来定义一个“类”,而不仅仅是函数定义: var Class = function () {}; VS function Class () {}; 谢谢!

我的观念是否正确?

我尝试在Node.js中编写高级应用程序,但是我不确定我的代码思路是否正确。 首先我想谈谈我的申请。 我的应用程序将显示在线结果没有刷新页面。 首先,我必须创build一个阵容,队伍将会玩。 假设我们有这样的2场比赛: var Schedule = [ {id:199, team1:{name:"Detroit",id:24319}, team2: {name: "San Antonio", id:32543}, date: "20.11.2015 12:00"}, {id: 200, team1: {name: "Boston", id: 23113}, team2: {name: "Los Angeles", id:25966}, date: "19.12.2015 10:00"} ]; 其次,当比赛要开始的时候,我必须开始配合创造一个对象。 我把这个匹配的属性放入数组中:“匹配”。 var Matches = []; Schedule.forEach(function(a,b){ Schedule.splice(a,1); new Match(a.team1,a.team2,a.id); var matchProperties = {"id": a.id, "team1": a.team1 , "team2":a.team2, "date": […]

Node.js HTTPcallback中的“this”损失上下文

self.test()不会在self.test()中被触发: App.prototype.createServer = function(){ var self = this; var s = http.createServer(function(req,res){ self.test(); // THIS DOESN`T WORK. req.addListener('end',function(){ res.writeHead(200,{'Content-Type' : 'application/x-javascript'}); self.test(); // THIS DOESN`T WORK. }); }); self.test(); // THIS WORKS. return s; }; App.prototype.test = function() { console.log('test') }; 如果我把它移出http.createServer()它的作品。 为什么是这样? this存储在self应该使它不会丢失的上下文。 我在这里错过了什么? 我可以提供额外的代码和更多的function( self.init等),如果有必要的话。 UPDATE 例如: new App({ port: 8000 }); 初始化: […]

为什么我们应该使用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) […]

在原型方法中使用“this”时丢失的上下文

好的,所以我有一个使用快递的节点应用程序。 在这个应用程序中,我有一个像这样的快速路线: var MyObj = require('./myObj') , myObj = new MyObj(); app.post('/api/blah', auth.requiresLogin, myObj.method2); 现在在MyObj对象中,我有以下几点: var MyObj = function(name){ this.name = name; this.message = 'hello'; }; MyObj.prototype = { method1: function(req, res, done){ console.log('In Method 1'); done(null, this.message +' '+this.name); }, method2: function(req, res){ var message; console.log('In Method 2'); this.method1(req, res, function(err, value){ if(err) throw […]

如何在Node.js包中导出修改的原型?

我可以导出函数: exports.foo = function() { return "bar"; }; 我可以修改原型: Object.prototype.foo = function() { return "bar"; }; 但后者只适用于Node解释器。 当我修改Node包内的原型然后require包时,Node忽略原型修改。 它抱怨Object.foo不存在。