更新 user.forceLogout()位于另一个http请求函数中。
使用JSLint时收到以下消息:
'用户'超出范围。 user.forceLogout(); //行......
我的代码就像:
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");
WebDriver driver = new ChromeDriver();
实现此类代码的正确方法是什么?
答案 0 :(得分:1)
使用'这个'而不是声明/定义中的变量名称:
var user = {
logout: function () {
this.forceLogout();
},
forceLogout () {
// code to force logout
}
}
答案 1 :(得分:1)
最好使用this
来引用您的用户:
var user = {
logout: function () {
this.forceLogout();
},
forceLogout () {
// code to force logout
}
}
您可能希望了解MDN上的this
:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/this
答案 2 :(得分:0)
您的代码在定义之前使用用户(在定义中)。 你可以这样定义它,而不是:
var user = {};
user.forceLogout = function(){};
user.logout = function(){ forceLogout(); };
答案 3 :(得分:0)
使用构造函数:
var user = function() {
var self = this;
self.logout = function () {
self.forceLogout();
};
self.forceLogout = function () {
// code to force logout
};
}
在函数中使用this
关键字大部分时间都可以使用,但有时可以weird things,这就是我在开始时将self
分配给user
的原因。构造函数var myUser = new user();
。
然后你就像这样创建你的用户:
new
this
关键字将创建一个新对象并将其绑定到user
构造函数的myUser
绑定,然后它将该新构造的对象返回到{{1}}
答案 4 :(得分:0)
/*jslint node, white */
var $http = require('https');
var user = (function() {
"use strict";
var userToReturn = {};
userToReturn.forceLogout = function () {
$http.someAction(); // kludge to keep from "empty block"
};
userToReturn.logout = function () {
var req = {}; // just to push some code in to lint.
$http(req).then(function (ignore) {
userToReturn.forceLogout();
});
};
return userToReturn; // nicely protected object in closure.
}()); // immediate invocation gives you that `userToReturn` within closure.
user.logout(); // inserting to dodge "Unused 'user'." error
如果您想创建许多这样的工具模式,也可以使用非匿名函数创建工厂模式。
现在我觉得这个解决方法是JSLint错过的一个案例,因为你在定义对象时仍然调用了附加到对象的函数,我敢打赌JSLint真正喜欢你做的是这个:
/*jslint node, white */
var $http = require('https');
var user = (function() {
"use strict";
var userToReturn = {};
// private function for shared logic.
function _forceLogout() {
$http.someAction(); // kludge to keep from "empty block"
}
userToReturn.forceLogout = _forceLogout;
userToReturn.logout = function () {
var req = {}; // just to push some code in to lint.
$http(req).then(function (ignore) {
_forceLogout();
});
};
return userToReturn;
}());
user.logout(); // inserting to dodge "Unused 'user'." error
创建一个闭包,将重复的代码分解出来,然后将其称为该闭包中的私有方法。
注意:旧版本的JSLint可能会抱怨名为ignore
的param。如果你不想把它全部拿走,你可以(/*response*/)
。如果您的代码稍后在该函数中使用response
,请将其保留,natch!
如果您未将$http
设置为require('http')
,请道歉。改为适当的,自然。
无论如何,两个都是lint。