请查看以下JS代码段:
var MyClass = function() {
var logging = true;
this.myFunction = function(logging) {
}
}
myObj = new MyClass();
myObj.myFunction(false);
有没有办法在 myFunction 中访问记录变量?
我能提出的唯一解决方案(this.logging)似乎不起作用: https://jsfiddle.net/x7m3w3gp/
答案 0 :(得分:1)
从myFunction
方法的代码中,不可能从其外部的范围访问局部变量,因为参数正在遮蔽变量。
使用this.logging
不访问变量,它将以相同的名称访问对象的属性。
您可以在该范围内放置一个可以访问该变量的函数,以用作myFunction
方法的桥梁。
变量,属性和桥接用法的示例:
var MyClass = function() {
// local variable
var logging = true;
// property
this.logging = 1;
// bridge local variable
function getLogging() { return logging; }
this.myFunction = function(logging) {
console.log(logging); // parameter
console.log(this.logging); // property
console.log(getLogging()); // local variable
}
}
myObj = new MyClass();
myObj.myFunction(false);
答案 1 :(得分:0)
在您的代码中,您创建的匿名函数的形式参数与本地变量具有相同的名称(在两种情况下都是“logging”)。在该匿名函数(最终作为“myFunction”属性的函数)中,符号“logging”将引用该参数。无法访问也称为“日志记录”的本地变量。
解决方案是为参数指定一个不同的名称。
请注意,this.logging
将引用名为“logging”的属性(如果有)。在您发布的代码中,没有任何此类属性。
答案 2 :(得分:0)
尝试将日志记录定义为MyClass的属性。这应该有效:
var MyClass = function() {
this.logging = true;
}
MyClass.prototype.myFunction = function(logging) {
/*References the logging-Property of the MyClass-Object:*/
var log1 = this.logging;
/*References the parameter:*/
var log2 = logging;
}
myObj = new MyClass();
myObj.myFunction(false);
答案 3 :(得分:0)
这应该有用;
var MyClass = function() {
this.logging = true;
var logging = 0;
this.myFunction = function(logging) {
var console = document.getElementById('console');
console.innerHTML = 'logging: ' + logging + '<br />';
console.innerHTML += 'this.logging: ' + this.logging + '<br/>';
console.innerHTML += 'var loggin:' + logging + ' !!! <br/>--> var logging scope never access';
}
}
myObj = new MyClass();
myObj.myFunction(false);