gpt4 book ai didi

javascript - Node.js 类模块系统

转载 作者:行者123 更新时间:2023-11-30 07:17:08 26 4
gpt4 key购买 nike

我试图在 node.js 中创建一个模块/类来测量异步执行时间,但不明白它有什么问题。我创建了以下类“Measure.js”

var Measure = module.exports = function(param_timeout, param_cb) {

this.timeout = param_timeout;
this.cb = param_cb;
}

Measure.prototype = {
startDate: "0",
timeout:"0",
cb:null,

start : function() {
this.startDate = new Date();
console.log('started');
},

stop : function() {
var stopDate = new Date();
this.cb(null,(stopDate-this.startDate));
}
}

我将它与以下代码一起使用:

var Measure = require('./Measure.js');
measure1 = new Measure(100,function(err,result){console.log('result: ' + result)});
measure1.start();
//do something
measure1.stop();

而且效果很好。但是,如果我尝试这样做:

var Measure = require('./Measure.js');
measure1 = new Measure(100,function(err,result){console.log('result: ' + result)});
measure1.start();
//do something
setTimeout(measure1.stop,100);

它不起作用并抛出类型错误:

TypeError: Object #<Object> has no method 'cb'

我的代码有什么问题吗?

最佳答案

当你直接调用对象的方法时,方法中的 this 引用你的对象,但是当你试图将它用作参数时,this 将引用全局对象 ( globalwindow)。

在你的情况下最好更换

setTimeout(measure1.stop,100);

setTimeout(function() { measure1.stop(); }, 100);

有关 行为的更多信息:http://bonsaiden.github.com/JavaScript-Garden/#function.this

关于javascript - Node.js 类模块系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com