Tag: 这个

如何在callback中访问正确的`this`?

我有一个构造函数注册一个事件处理程序: function MyConstructor(data, transport) { this.data = data; transport.on('data', function () { alert(this.data); }); } // Mock transport object var transport = { on: function(event, callback) { setTimeout(callback, 1000); } }; // called as var obj = new MyConstructor('foo', transport); 但是,我无法访问callback中创build的对象的data属性。 看起来this不是指创build的对象,而是指向另一个对象。 我也尝试使用对象方法而不是匿名函数: function MyConstructor(data, transport) { this.data = data; transport.on('data', this.alert); } MyConstructor.prototype.alert = […]

使用_this来引用父类的方法

我使用前缀_this从一个callback函数调用它时引用一个父类函数。 但是,当我运行节点服务器时,出现错误消息'_this is not defined'。 实际上,我直接从我正在学习的平均值堆书中抽取这些代码,但似乎无法解决这个问题。 父函数 var getErrorMessage = function(err){ var message = ''; if(err.code){ switch(err.code){ case 11000: case 11001: message = 'Username already exists'; break; default: message = 'Something went Wrong'; } } else{ for(var errName in err.errors){ if(err.errors[errName].message){ message = err.errors[errName].message; } } } return message; }; 稍后在callback中调用函数 exports.saveOAuthUserProfile = function(req, profile, […]

存储一个类实例成员函数的引用使得它的范围变得松散

我正在使用节点v8.1.3 我在文件utility.js有一个类Utility class Utility { constructor() { this.typeChecker = require('javascript-type-checker'); this.internalErrors = require('../constants/internalErrors'); this.axios = require('axios'); this.config = require('../config'); } getCurrentWeatherByLatLong(latitude, longitude) { if(!this.isValidLatitude(latitude)) throw this.internalErrors.ERR_LAT_INVALID; if(!this.isValidLongitude(longitude)) throw this.internalErrors.ERR_LONG_INVALID; const url = `${this.config.BASE_URL}?appid=${this.config.API_KEY}&lat=${latitude}&lon=${longitude}`; return this.axios.default.get(url); } isValidLatitude(latitude) { return (this.typeChecker.isNumber(latitude) && latitude >= -90 && latitude <=90); } isValidLongitude(longitude) { return (this.typeChecker.isNumber(longitude) && longitude >= […]

节点util.inherits和这个问题

我正试图解决一个节点服务器中的“这个问题”。 如果我不使用worker.stuff.bind(worker)replace下面的worker.stuff ,它不起作用。 有没有办法在工人类本身添加bind ? 每次我使用它的function都很无聊。 这是服务器: var app = require("express")() , Worker = require('./worker') , worker = new Worker(); app.get("/stuff", worker.stuff); worker.on('done', function () { console.log('done') }); app.listen(3000); 这是工人: function Worker(options) {} require('util').inherits(Worker, require('events').EventEmitter); Worker.prototype.stuff = function (req, res) { this.emit('done'); res.send(); } module.exports = Worker;

this.property在nodejs中返回undefined

我正在编写一个节点的应用程序,我遇到了一些奇怪的事情。 我使用call()方法将一个对象传递给一个函数来修改该对象。 当我做console.log(这个)函数时,它返回的对象罚款,但是当我尝试做console.log(this.foo)或尝试修改该对象说,未定义。 更新:我也不得不提到我把这个函数传递给一个对象,因为我必须将函数注入到另一个函数中。 (更具体地说,我试图让这个工作,也许这也是问题的一部分。 var obj = {name: "John", age: 23}; var functions = {up: function() { /* do stuff */ }, down: function() { /* do stuff */ functions.up.call(obj); up: function() { console.log(this); //returns {name: "John", age: 23} console.log(this.name); //returns undefined this.wife = "Jenny"; //doesn't do anything } 但是,如果我设置属性与“_”他们确实存在,但不显示时,我打电话给console.log(这); up: function() { this._wife […]

从原型改变/包装一个function

我正在写一个框架,使用函数的包装来创build一个debugging工具。 目前,我想通过函数调用来汇报和汇总信息。 我使用下面的代码: function wrap(label, cb) { return function () { report(label); cb.apply(this, arguments); } } 然后为了绑定debugging操作,我将使用: function funcToWrap (){/* Some existing function*/} funcToWrap = wrap("ContextLabel", funcToWrap); 现在,当funcToWrap被调用时,它将通过report()方法连线。 我的要求是现在改变这个语法,以便通过以下方式完成包装: funcToWrap.wrap("ContextLabel"); 理想情况下,这样的事情会解决我的问题,但这当然是非法的: Function.prototype.time = function(label){ var func = this; // The actual difference: this = function () { // ILLEGAL report(label); func.apply(this, arguments); } }; 感谢您对此有所了解。

为什么JavaScript“this”在Node和Browser环境中返回不同的值?

在观看了Kyle Simpson的Pluralsight 高级JavaScript课程之后,我创build了一个简单的代码片段来尝试this绑定。 我通常在SublimeText编辑器中工作,并在其中configuration了节点构build引擎,偶尔我也在浏览器中运行相同的代码。 在节点和浏览器[Chrome]中执行代码时,我注意到了程序输出中的一个区别。 以下是testingthis绑定的代码片段。 function foo() { console.log(this.bar); } var bar = "bar1"; var obj = {bar : "bar2"}; foo(); foo.call(obj); 当我使用Sublime执行它时,它将返回undefined和bar2 。 但是,当我在浏览器中执行相同的代码片段时,它会返回bar1和bar2 ,我认为这是正确的,因为variablesbar是在全局范围内定义的。 我无法理解为什么Node环境将其作为undefined返回。 请帮助。

“这个”在构造之后丢失了? (TS /节点/expression)

我正在尝试使用node-express构build一个简单的http应用程序。 设置路由时出现问题, MyRouter类的构造函数有this但是它在getRoutes()函数中丢失了。 class Main { public async run(): Promise<void> { const myRouter = new MyRouter(this.config); // this.server is express() during construct this.server.use("/v1", myRouter.getRoutes); await this.server.listen(this.config.rest.port); } } class MyRouter { private router: express.Router; constructor(private config: any) { this.router = express.Router(); console.log(this); // Prints the whole Router object! } public getRoutes(): express.Router { console.log(this); // […]

如何在JavaScript中解构对象时绑定方法?

如何在JavaScript中解构对象时绑定方法? const person = { getName: function() { console.log(this); } }; var a = person.getName; var b = person.getName.bind(person); var {getName: c} = person; person.getName(); //=> {getName: [Function]} a(); //=> window or global b(); //=> {getName: [Function]} c(); //=> window or global 我想要clogin控制台的“父”对象{getName: [Function]} 。 在一个解构行中解构一个对象时,是否有办法绑定所有方法?

如何检查一个对象是否是一个node.jsstream实例?

我试图检查某个对象( this )是否是一个stream实例。 我很难确定它是否仍然是this函数的内核,就像函数被触发一样。 我已经尝试过typeof this ,它返回一个object 。 我已经看过这个问题,没有find明确的答案..任何build议? 谢谢之前 StreamName.prototype._getEndpointData = function ( endpoint ) { /* Make a request based on a specific endpoint */ var apikey = this.source.apikey; request.getAsync( { headers: { // 'content-type' : 'application/x-www-form-urlencoded', 'User-Agent': 'request', 'Authorization': getAuthByApikey( apikey ) }, url: generateUrl( apikey, endpoint ) }) .get( 1 ) […]