我正在为node.js开发一个web框架。这是代码;
function Router(request, response) {
this.routes = {};
var parse = require('url').parse;
var path = parse(request.url).pathname,
reqRoutes = this.routes[request.method],
reqRoutesLen = reqRoutes.length;
..... // more code
};
我应该将所有var更改为此,如下所示:
function Router(request, response) {
this.routes = {};
this.parse = require('url').parse;
this.path = this.parse(request.url).pathname;
this.reqRoutes = this.routes[request.method];
this.reqRoutesLen = this.reqRoutes.length;
..... // more code
};
有任何意见吗?
答案 0 :(得分:13)
如果希望属性在相关对象的生命周期中保持不变,则向this
添加属性。使用var
作为局部变量。
编辑 - 正如Bergi在评论中指出的那样,用var
声明的变量在从函数调用返回时不会必然消失。它们是,并且只能直接访问声明它们的范围内的代码,以及词汇嵌套的范围。
答案 1 :(得分:1)
这取决于你想做什么。
如果使用var
声明变量,则它们是函数的本地变量,无法在外部访问。
如果将变量分配给this
,则它们将被设置为调用函数的上下文对象的属性。
所以,例如,如果你写:
var obj = new Router();
然后obj
将所有变量作为属性,您可以更改它们。如果你打电话
somobject.Router()
然后将所有变量设置为someobject
的属性。
答案 2 :(得分:1)
您可以将this
挂起的属性视为其他语言中的实例变量(类似)。
看起来你正在创建一个构造函数,并且可能会添加一些原型方法。如果是这种情况,并且您需要访问routes
,那么您已经获得了path
,而不是Router.prototype = {
doSomething: function(){
this.routes; // available
path; // not available
}
}
。
{{1}}
答案 3 :(得分:1)
在构造函数中使用var
通常用于私有变量,而使用this.
用于公共变量。
this.
的示例:
function Router() {
this.foo = "bar";
this.foobar = function () {
return this.foo;
}
}
var r = new Router();
r.foo // Accessible
var
的示例:
function Router() {
var _foo = "bar";
this.foobar = function () {
return _foo;
}
}
var r = new Router();
r._foo // Not accessible