Articles of 这个

关于这个/ @在Javascript / Coffeescript中的一个难题

我正在通过Trevor Burnham的CoffeeScript书,我遇到了一个关于this / @的奇怪的难题。 这个难题有几个部分(我可能只是很困惑),所以我会尽力使这个尽可能清楚。 我遇到的主要问题是,通过不同的REPL和解释器,运行相同的代码会得到各种不一致的结果。 我正在testing(1) coffee REPL和解释器,(2)Node的REPL和解释器,以及(3)V8的REPL和解释器。 这里是代码,首先是Coffeescript,然后是Javascript: // coffeescript setName = (name) -> @name = name setName 'Lulu' console.log name console.log @name // Javascript via the coffee compiler (function() { var setName; setName = function(name) { return this.name = name; }; setName('Lulu'); // console.log for node below – print for v8 // […]

什么是NodeJS中的“全局”对象

我刚刚在NodeJS环境中看到了this关键字的奇怪行为。 我用代码列出他们。 我已经用NodeJS v6.x和一个JavaScript文件运行这个代码。 在使用一行代码进行testing时,无论是否使用'use strict'语句,都会指向一个空对象{} 。 console.log(this) 但是,当我在一个自我执行的函数内运行这个语句时, (function(){ console.log(this); }()); 这是打印一个真正的大对象。 在我看来, NodeJS环境创build的全局执行上下文对象。 在'use strict'语句执行上述function的同时,预计打印undefined (function(){ 'use strict'; console.log(this); }()); 但是,在使用浏览器(我只使用Chrome进行testing)的同时,前三个例子产生window对象,最后一个undefined按预期undefined 。 浏览器的行为是可以理解的。 但是,在NodeJS情况下,它不会创build执行上下文,直到我包装在一个函数内? 那么, NodeJS大部分代码都运行一个空的全局 object ?

REPL和脚本之间的“这个”是不同的

读完mozilla文档后,我发现这个: 在全局执行上下文(在任何函数之外),这是指全局对象,无论是否在严格模式下。 玩了一段范围后,我发现在node.js REPL … > this === global true 但是当我用同一行创build一个脚本… $ cat > script.js console.log(this === global) $ node script.js false 是否有一个原因? 或者是一个错误?

如何解决像“asynchronous”和“请求”这样的节点库的“这个”问题

我写了一个节点脚本,通过请求REST API数据(使用库请求)来获取一些数据。 它由几个function组成,如下所示: var data = { /* object to store all data */ }, function getKloutData() { request(url, function() { /* store data */} } // and a function for twitter data 因为我想在获取所有使用库asynchronous之后执行一些操作来运行所有获取函数,如下所示: async.parallel([ getTwitterData, getKloutData ], function() { console.log('done'); }); 这一切工作正常,但是我想把所有东西都放在一个对象模式中,这样我就可以同时获取多个账户: function Fetcher(name) { this.userID = '' this.user = { /* data */ […]

JavaScript的事件循环问题

我不知道事件循环如何在JavaScript中工作,我正在使用node.js,但我想同样的问题适用于浏览器。 我有一些asynchronous调用(比方说setTimeout或$.ajax或fs.readFile ),一段时间后,事件循环执行callback 现在当callback执行时,幕后会发生什么? 当它调用asynchronous的东西时,它会复活它使用的堆栈吗? 在实践中callback所在的上下文是什么? 它是如何工作的? 编辑 :谢谢,我看..只是一个问题,事件循环如何“记住”callback的范围?

Nodejs,表示路由为es6类

我想清理我的项目,现在我尝试使用es6类为我的路线。 我的问题是这总是未定义的。 var express = require('express'); var app = express(); class Routes { constructor(){ this.foo = 10 } Root(req, res, next){ res.json({foo: this.foo}); // TypeError: Cannot read property 'foo' of undefined } } var routes = new Routes(); app.get('/', routes.Root); app.listen(8080);

将对象绑定到Promise.then()参数的正确方法

我发现了一个困难的方法,那就是不能简单地将对象的函数传递给蓝鸟。 我假设蓝鸟then正在做一些魔术,并在匿名函数中包装传递函数。 所以我附加了一个.bind的function,它的工作。 这是与蓝鸟做到这一点的正确方法? 还是有更好的办法? var Promise = require("bluebird") var Chair = function(){ this.color = "red" return this } Chair.prototype.build = function(wood){ return this.color + " " + wood } var chair = new Chair() //var x = chair.build("cherry") Promise.resolve("cherry") .then(chair.build.bind(chair)) // color is undefined without bind .then(console.log) 我知道这一切都不是asynchronous,所以请同步示例,我的用法是asynchronous。